Как удалить флажки динамически в tkinter? - PullRequest
0 голосов
/ 05 мая 2019

Я создаю своеобразное приложение, используя 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()

Я хочу снять флажок, но не могу этого сделать, поскольку функция clear не читает c.pack_forget()

1 Ответ

0 голосов
/ 05 мая 2019

Очень просто сохранить все объекты 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...