2012-11-11 125 views
0

我的Tkinter Entry小部件有問題。 我只是測試的東西,並希望我的回調打印出我在Entry self.a中輸入的任何東西。但我得到這個錯誤。Tkinter Entry和.get()的問題

File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in call return self.func(*args) File "C:/Users/Andy/testimage.py", line 146, in get print a.get(self) NameError: global name 'a' is not defined

我想知道是否有人能告訴我我做錯了什麼。我將回調函數正確地鏈接起來,因爲如果我使用它打印「aasdfasd」,它會在我按下按鈕時打印出來。

def clicked_wbbalance(self): 
    self.top = Toplevel() 
    self.top.title("LASKJDF...") 
    Label(self.top, text="Enter low level").grid(row=0, column=0,padx=10) 
    Label(self.top, text="Enter high level").grid(row=1, column=0,padx=10) 
    Label(self.top, text="Values must be between 0 to 255").grid(row=3, column=0) 
    Button(self.top, text="Ok", command=self.get).grid(row=3, column = 1) 

    self.a =Entry(self.top).grid(row=0, column=1,padx=10) 
    self.b =Entry(self.top).grid(row=1, column=1,padx=10) 

def get(self): 
    print self.a.get(self) 

回答

3

正如RocketDonkey指出的那樣,您的回溯與您發佈的代碼不匹配。

您的書面會產生這樣的回溯代碼:

AttributeError: 'NoneType' object has no attribute 'get' 

問題的根源是,grid返回None。這意味着屬性ab將爲None,因爲它們被分配了對grid的調用結果。修復通過把對象創建和部件放置在不同的線上:

self.a = Entry(self.top) 
self.b = Entry(self.top) 

self.a.grid(row=0, column=1,padx=10) 
self.b.grid(row=1, column=1,padx=10) 
+0

+1爲更好的解釋:) – RocketDonkey

+0

謝謝你清理的東西了,它的工作! – user1730056

1

你回溯說print a.get(self) NameError: global name 'a' is not defined,但您發佈的代碼使用的語法print self.a.get(self)(這似乎是正確的)。因此,如果您在第146行中檢查,則不是aself的前綴,這意味着您不是引用該實例的屬性a,而是嘗試自行引用a,這是未定義的。嘗試在第146行的a前添加self,然後查看問題是否仍然存在。

+0

嗨,謝謝你的回覆。第146行是我在OP中發佈的代碼中的最後一行,它已經在 前面有自我我在想這是否可能是因爲我在使用self.top?這是我第一次使用它,所以我不確定它是否會影響任何東西。 – user1730056

+0

@ user1730056嗯,這很奇怪,因爲你的追蹤顯示了確切的線條,但沒有前面的「自我」。在保存代碼之後,回溯是否仍然相同?你至少應該看到一個包含'print self.a.get(self)'的錯誤。 – RocketDonkey