特金特:属性错误:NoneType 对象没有属性 <属性名称>
-
12-09-2019 - |
题
我创建了这个简单的 GUI:
from tkinter import *
root = Tk()
def grabText(event):
print(entryBox.get())
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:\Python> python.exe myFiles\testBed.py
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python\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'
为什么是 entryBox
设置 None
?
解决方案
这 grid
, pack
和 place
的职能 Entry
对象和所有其他小部件的返回 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
块中的语句。
其他提示
更改这一行:
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)
正如您已经正确执行的那样 grabBtn
!
不隶属于 StackOverflow