AttributeError: 'NoneType' object has no attribute 'delete'

前端 未结 3 819
旧巷少年郎
旧巷少年郎 2020-12-21 11:33

I have run into this issue and I can\'t understand why.

I took my code from my application and made this test code so you don\'t have to go through a bunch of junk t

相关标签:
3条回答
  • 2020-12-21 12:08

    The entryBox that you have declared here has not been obtained yet when you are trying to do call delete on that. If you want a simple way to reproduce the error.

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

    To fix this you can wrap the entryBox or ensure that it is obtained.

    if entryBox:
       entryBox.delete(0, 20)
    
    0 讨论(0)
  • 2020-12-21 12:12

    In this line:

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

    grid doesn't return anything, so entryBox is None, which doesn't have a delete method. You have to set entryBox to tk.Entry(mainWindow, textvariable=v) then call the grid method on entryBox

    0 讨论(0)
  • 2020-12-21 12:26

    The reason this is happening is because you are gridding it in the same variable. If you change your code to the following, it should work:

    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()
    

    The reason this works is because grid() does not return anything.

    0 讨论(0)
提交回复
热议问题