Как удалить лейбл из команды в другой команде

Рейтинг: 0Ответов: 2Опубликовано: 18.03.2023

Мне надо чтобы по нажатию кнопки Delete_label Label удалялся.

Код:

from tkinter import *

def add_label():
    a=Label(win,text='Label')
    a.pack()
     
def del_label():
    pass

win=Tk()
win.geometry('1080x2400')
win.title('Помогите')
win.resizable(width=0, height=0)

Button(win,text='Add_label',command=add_label).pack()
Button(win,text='Delete_label',command=del_label).pack()

win.mainloop()

Ответы

▲ 0

Вариант 1 - сохраните метки в список, потом удаляйте
Вариант 2 - переберите все элементы через pack_slaves() и удалите метки
См. примечания в коде.

from tkinter import *

labels = []


def add_label():
    a = Label(win, text='Label')
    labels.append(a)
    a.pack()


def del_label(): # Вариант 1 - удаляет метки по очереди из списка
    if labels:
        labels.pop(0).destroy()


def delete_all_labels():  # Вариант 2 - удаляет все метки без списка
    for child in win.pack_slaves():
        if isinstance(child, tkinter.Label):
            child.destroy()

win = Tk()
win.geometry('1080x2400')
win.title('Помогите')
win.resizable(width=0, height=0)

Button(win, text='Add_label', command=add_label).pack()
Button(win, text='Delete_label', command=del_label).pack()

Button(win, text='Delete ALL Labels', command=delete_all_labels).pack()  # доп. кнопка для удаления всех меток без списка

win.mainloop()
▲ 0

Можно это сделать через label.configure():

def delete():
    global a
    a.configure(text="")

и вторую кнопку заменить на это:

Button(win,text='Delete_label',command=delete).pack()