【问题标题】:AttributeError: 'NoneType' object has no attribute 'delete'AttributeError:“NoneType”对象没有“删除”属性
【发布时间】:2012-10-21 22:31:09
【问题描述】:

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

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

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

在此应用程序中,我收到错误“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()

【问题讨论】:

    标签: python tkinter nonetype


    【解决方案1】:

    在这一行:

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

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

    【讨论】:

    • 我会在建立自己的声誉后立即投票赞成...这就是解决办法。谢谢!!!!!!
    【解决方案2】:

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

    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() 不返回任何内容。

    【讨论】:

    • 这行得通。谢谢 !!!一旦我建立了自己的声誉,我会回来投票赞成 :) 谢谢!!!
    【解决方案3】:

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

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

    要解决这个问题,您可以包装 entryBox 或确保它被获取。

    if entryBox:
       entryBox.delete(0, 20)
    

    【讨论】:

    • 不,在这种特定情况下,这根本不是问题。
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

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

      text_variable.set("") or v.set("")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-01
        • 2021-12-26
        • 2019-07-23
        • 2018-05-13
        • 2020-09-07
        • 2017-05-03
        • 2023-03-16
        • 2018-07-14
        相关资源
        最近更新 更多