2016-03-15 49 views
-1

我只是在學習python(有五天的時間來這樣做),而且我遇到了hello world程序的一些基本問題。任何想法,我缺少什麼?Hello World:應用程序實例沒有屬性'say_hi'

#!/user/bin/python3 

from Tkinter import * 

class App: 
    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 

     def say_hi(self): 
      print "Hello word!" 

     self.button = Button (frame, text="QUIT", 
      fg="red", command=frame.quit) 
     self.button.pack(side=LEFT) 

     self.hi = Button (frame, text="Hello", 
      command=self.say_hi) 
     self.button.pack(side=RIGHT) 

root = Tk() 
app = App (root) 
root.mainloop() 

我得到的錯誤是:

File "HelloWorld.py", line 22, in <module> 

app = App (root) 

File "HelloWorld.py", 

line 18, in __init__ 

command=self.say_hi) 

AttributeError: App instance has no attribute 'say_hi' 

不該def say_hi(self):創建實例?提前致謝。

+2

這真的是你的縮進看起來如何? – zondo

+0

編號def __init__後的所有內容都被正確縮進。將編輯上面的代碼。 – Mog

回答

2

你的問題是你在__init__()裏面定義了say_hi()。只要將下來,並取消縮進它:

#!/user/bin/python3 

from Tkinter import * 

class App: 
    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 

     self.button = Button (frame, text="QUIT", 
      fg="red", command=frame.quit) 
     self.button.pack(side=LEFT) 

     self.hi = Button (frame, text="Hello", 
      command=self.say_hi) 
     self.button.pack(side=RIGHT) 

    def say_hi(self): 
     print "Hello word!" 

root = Tk() 
app = App (root) 
root.mainloop() 

因爲它是,say_hi()只是在__init__()一個局部變量。如果你在__init__()以外定義它,這是一種方法。

+0

感謝您的解釋。 – Mog

1

您在__init__的範圍內創建say_hi。因此,它應該是:

self.hi = Button (frame, text="Hello", 
    command=say_hi) 

但你可能是指:

class App: 
    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 

     self.button = Button (frame, text="QUIT", 
      fg="red", command=frame.quit) 
     self.button.pack(side=LEFT) 

     self.hi = Button (frame, text="Hello", 
      command=self.say_hi) 
     self.button.pack(side=RIGHT) 

    def say_hi(self): 
     print "Hello word!" 

希望這有助於!