AttributeError:'NoneType'对象没有'grid_remove'属性
我只用过一点Tkinter,觉得它很好用,但就像任何编程语言一样,学习是需要时间的。我正在尝试创建一个简单的待办事项列表,最后希望能把它保存到文件里。但是我在第17行的按钮无法被移除,而且下一行的按钮也不能在不同的位置替换。
from tkinter import *
import time
root = Tk()
root.geometry("300x300")
root.title("Programs")
global TDrow
TDrow = 2
def tdTaskAdd():
global TDrow
global tdEnter
TDrow = int(TDrow+1)
s = tdEntry.get()
label = Label(ToDoFrame,text=s).grid(row=TDrow,column=1)
tdEntry.grid(row=TDrow+1,column=1)
tdEnter.grid_remove()
tdEnter = Button(ToDoFrame,text="AddTask",command=tdTaskAdd).grid(row=TDrow+2,column=1)
ToDoFrame = Frame()
ToDoFrame.place(x=0,y=10)
tdTitle = Label(ToDoFrame,text="To Do List:").grid(row=TDrow-1,column=1)
tdEntry= Entry(ToDoFrame)
tdEntry.grid(row=TDrow+1,column=1)
tdEntry.insert(0, "Enter a new task")
global tdEnter
tdEnter = Button(ToDoFrame,text="Add Task",command=tdTaskAdd).grid(row=TDrow+2,column=1)
mainloop()
我在运行这个的时候总是出现一个错误,提示是:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
return self.func(*args)
File "C:\Users\Eddy\Desktop\pythonStartup.py", line 17, in tdTaskAdd
tdEnter.grid_remove()
AttributeError: 'NoneType' object has no attribute 'grid_remove'
1 个回答
3
问题出在这一行:
tdEnter = Button(ToDoFrame,text="Add Task",command=tdTaskAdd).grid(row=TDrow+2,column=1)
这样一来,tdEnter
不是 Button
,而是 grid
的返回值,也就是 None
。
试试这个:
tdEnter = Button(ToDoFrame,text="Add Task",command=tdTaskAdd)
tdEnter.grid(row=TDrow+2,column=1)
对于 label
也是一样,当你在 tdAddTask
函数中创建一个新按钮时。
顺便说一下,不需要每次都添加一个新按钮,只需调用它的 grid
方法来重新定位它就可以了。