一尘不染

python-Tkinter:AttributeError:NoneType对象没有属性<attribute name>

python

我创建了这个简单的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?


阅读 820

收藏
2020-02-04

共1个答案

一尘不染

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语句,这将带来额外的副作用,使你的布局更易于理解和维护。

2020-02-04