AttributeError:'NoneType'对象没有属性'delete'

时间:2012-10-21 22:31:09

标签: python tkinter nonetype

我遇到过这个问题,我无法理解为什么。

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

我在其他代码中使用此功能。但是在比较了两者之后,我不能为我的生活弄明白这一点。

在这个应用程序中,我收到错误“AttributeError:'NoneType'对象没有属性'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 个答案:

答案 0 :(得分:6)

在这一行:

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

网格不返回任何内容,因此entryBox为None,它没有删除方法。您必须将entryBox设置为tk.Entry(mainWindow, textvariable=v),然后在grid上调用entryBox方法

答案 1 :(得分: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()没有返回任何内容。

答案 2 :(得分: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)

答案 3 :(得分:0)

_stringToPath.js

#代替在同一行中使用,您可以这样做

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