Tkinter:AttributeError:NoneType对象没有属性get

我已经看到类似的错误消息,但没有find一个解决scheme,将解决它在我的情况下的其他几个职位。

我用TkInter尝试了一下,创build了一个非常简单的用户界面。 代码如下 –

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。 当我点击Grabbutton时,在控制台上出现以下错误:

 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

我确信有人可能以前曾经处理过这个问题。 任何帮助表示赞赏。

Entry对象(和所有其他小部件)的grid (以及packplace )函数返回None 。 在python中,当您执行a().b() ,expression式的结果是b()返回的结果,因此Entry(...).grid(...)将返回None

你应该把它分成两行,就像这样:

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

这样,你就可以将你的Entry引用保存在entryBox ,并按照你的期望进行布局。 如果您以块的forms收集所有grid和/或pack语句,这会带来额外的副作用,使您的布局更易于理解和维护。

改变这一行:

 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