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。 当我点击Grab
button时,在控制台上出现以下错误:
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
(以及pack
和place
)函数返回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
!