2009-07-09 110 views
23

我已經看到類似的錯誤消息,但找不到解決方案,將解決它在我的情況下的幾個其他職位。Tkinter:AttributeError:NoneType對象沒有屬性獲取

我用TkInter玩了一下,創建了一個非常簡單的用戶界面。代碼如下 -

from string import * 
from Tkinter import * 
import tkMessageBox 

root=Tk() 
vid = IntVar() 

def grabText(event): 
    if entryBox.get().strip()=="": 
     tkMessageBox.showerror("Error", "Please enter text") 
    else: 
     print entryBox.get().strip()  

root.title("My Sample") 
root.maxsize(width=550, height=200) 
root.minsize(width=550, height=200) 
root.resizable(width=NO, height=NO)  

label=Label(root, text = "Enter text:").grid(row=2,column=0,sticky=W) 
entryBox=Entry(root,width=60).grid(row=2, column=1,sticky=W) 
grabBtn=Button(root, text="Grab") 
grabBtn.grid(row=8, column=1) 
grabBtn.bind('<Button-1>', grabText) 

root.mainloop() 

我啓動並運行了UI。當我點擊Grab按鈕,我得到的控制檯上看到以下錯誤:

C:\Python25>python.exe myFiles\testBed.py 
Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__ 
    return self.func(*args) 
    File "myFiles\testBed.py", line 10, in grabText 
    if entryBox.get().strip()=="": 
AttributeError: 'NoneType' object has no attribute 'get' 

錯誤追溯到Tkinter.py

我確信有人可能以前曾處理過這個問題。任何幫助表示讚賞。

+0

更多詳情[** here **](https://www.begueradj.com/tkinter-saya-idiom.html) – 2017-06-27 07:50:47

回答

50

Entry對象(以及所有其他部件的)的grid(和pack,和place)函數返回None。在python中,當你做a().b()時,表達式的結果是b()返回的結果,因此Entry(...).grid(...)將返回None

你應該拆分成兩行,像這樣:

entryBox = Entry(root, width=60) 
entryBox.grid(row=2, column=1, sticky=W) 

這樣的話,你會得到你的Entry參考存儲在entryBox,並且它奠定了像你期望的那樣。如果您以塊的形式收集所有的grid和/或pack陳述,這會帶來額外的副作用,使您的佈局更易於理解和維護。

3

改變這一行:

entryBox=Entry(root,width=60).grid(row=2, column=1,sticky=W) 

到這兩條線:

entryBox=Entry(root,width=60) 
entryBox.grid(row=2, column=1,sticky=W) 

同樣爲label的方式 - 就像你已經正確地爲grabBtn做!

+0

感謝Alex。我應該想到:-) – Arnkrishn 2009-07-09 19:43:15