如何在Tkinter中动态删除复选框?

时间:2019-05-05 07:04:16

标签: python checkbox tkinter

我正在使用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()

1 个答案:

答案 0 :(得分:0)

仅存储在Checkbutton函数中创建的generate()的所有对象是非常简单的

  1. 首先,您需要一个List

    提示:如果需要存储有关该对象的更多信息,请使用“字典”。

  2. 追加每个创建的Checkbutton。 (List.append(c)..

  3. 然后在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()