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

时间:2014-08-02 07:26:30

标签: python tkinter

我只对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 个答案:

答案 0 :(得分:2)

问题在于这一行:

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功能中创建新按钮时相同。

BTW,每次都不需要添加新按钮,只需调用它的grid方法来重新存储它。