我正在使用tkinter
制作一种待办事项应用程序。为此,我想动态生成复选框,并且已经使用函数成功完成了此操作,但是当用户按下清除按钮时,我也想删除这些复选框。该怎么做。
name=Stringvar()
ent=Entry(root,textvariable=name).pack()
def clear(ent):
ent.pack_forget()
def generate():
k=name.get()
c=Checkbutton(root,text=k)
c.pack()
btn1=Button(root,text="Submit",command=generate)
btn1.pack()
btn2=Button(root,text="Clear",command=clear)
btn2.pack()
我想删除该复选框,但不能删除,因为功能清除不会读取c.pack_forget()
答案 0 :(得分:0)
仅存储在Checkbutton
函数中创建的generate()
的所有对象是非常简单的
首先,您需要一个List
。
提示:如果需要存储有关该对象的更多信息,请使用“字典”。
追加每个创建的Checkbutton
。 (List.append(c)..
)
然后在pack_forget()
循环的帮助下从Checkbutton
List
for
。如果您不打算将来使用那些“检查”按钮,请使用destroy()
而不是pack_forget()
。
代码如下:
from tkinter import *
root = Tk()
name = StringVar()
check_box_list = []
ent=Entry(root,textvariable=name).pack()
def clear():
for i in check_box_list:
i.pack_forget() # forget checkbutton
# i.destroy() # use destroy if you dont need those checkbuttons in future
def generate():
k=name.get()
c=Checkbutton(root,text=k)
c.pack()
check_box_list.append(c) # add checkbutton
btn1=Button(root,text="Submit",command=generate)
btn1.pack()
btn2=Button(root,text="Clear",command=clear)
btn2.pack()
mainloop()
如果要分别删除每个而不是全部清除,请尝试此操作。
from tkinter import *
root = Tk()
name = StringVar()
check_box_list = []
ent=Entry(root,textvariable=name).pack()
def clear():
for i in check_box_list:
if i.winfo_exists(): # Checks if the widget exists or not
i.pack_forget() # forget checkbutton
# i.destroy() # use destroy if you dont need those checkbuttons in future
def generate():
k=name.get()
f = Frame(root)
Checkbutton(f, var=StringVar(), text=k).pack(side='left')
Button(f, text='✕', command=f.destroy).pack(side='left')
check_box_list.append(f) # add Frame
f.pack()
btn1=Button(root,text="Submit",command=generate)
btn1.pack()
btn2=Button(root,text="Clear All",command=clear)
btn2.pack()
mainloop()