3

我遇到了这个问题,我不明白为什么。

我从我的应用程序中获取了我的代码并制作了这个测试代码,这样你就不必经历一堆垃圾来看看我在问什么。

我有这个在其他代码中工作。但是在比较了两者之后,我一生都无法弄清楚这一点。

在此应用程序中,我收到错误“AttributeError: 'NoneType' object has no attribute 'delete'”。

import Tkinter as tk

def main():
    mainWindow = tk.Tk()
    v = tk.StringVar()
    entryBox = tk.Entry(mainWindow, textvariable=v).grid(column=0, row=1)
    def test():
        entryBox.delete(0,20)
    testButton = tk.Button(mainWindow, text='Go!', command=test, padx=10).grid(row=2, column=0) 
    tk.mainloop()
main()
4

5 回答 5

9

在这一行:

entryBox = tk.Entry(mainWindow, textvariable=v).grid(column=0, row=1)

grid 不返回任何东西,所以 entryBox 是None,它没有 delete 方法。您必须设置entryBoxtk.Entry(mainWindow, textvariable=v)然后调用该grid方法entryBox

于 2012-10-21T22:36:45.497 回答
1

发生这种情况的原因是因为您将其网格化在同一个变量中。如果您将代码更改为以下内容,它应该可以工作:

import Tkinter as tk
def main():
    mainWindow = tk.Tk()
    v = tk.StringVar()
    entryBox = tk.Entry(mainWindow, textvariable=v)
    def test():
        entryBox.delete(0,20)
    testButton = tk.Button(mainWindow, text='Go!', command=test, padx=10)
    testButton.grid(row=2, column=0) 
    entryBox.grid(column=0, row=1)
    tk.mainloop()
main()

之所以有效,是因为grid()它不返回任何东西。

于 2012-10-21T22:35:49.947 回答
0

entryBox您尝试调用它时,尚未获得您在此处声明delete的那个。如果您想要一种简单的方法来重现错误。

In [1]: x = None
In [2]: x.delete
AttributeError: 'NoneType' object has no attribute 'delete'

要解决此问题,您可以包装 entryBox 或确保获得它。

if entryBox:
   entryBox.delete(0, 20)
于 2012-10-21T22:35:08.277 回答
0

entryBox = tk.Entry(mainWindow, textvariable=v).grid(column=0, row=1)

#而不是在同一行中使用,你可以这样做

entryBox = tk.Entry(mainWindow, textvariable=v) entryBox.grid(column=0, row=1)

于 2021-02-04T16:27:39.767 回答
0

如果要清除 Entry 小部件,而不是删除小部件内容,请清除 text 变量。

text_variable.set("") or v.set("")
于 2022-02-20T14:20:10.663 回答