从 tkinter 中删除多个标签

问题描述

我正在尝试制作一个简单的 tkinter 脚本,在单击按钮后在 GUI 中创建 10 个数字。问题是从 GUI 中删除数字。我只能删除一个号码。这些数字是通过循环创建的。 我已经打印出 .pack() 变量“self.label_a2”的名称名称是:.!label2、.!label3 等等。我还没有想出如何使用“.!label2”名称删除标签。也如何去除不止一个标签

代码如下:

from tkinter import *
root = Tk()

class the_GUI:
    def __init__(self,master):
        self.master = master
        master.title("Numbers")
        self.start_prim_button = Button(master,text="Get numbers",command=self.main_prim,width=30)
        self.start_prim_button.pack()   
        self.start_secu_button = Button(master,text="Remove numbers",command=self.main_secu,width=30)
        self.start_secu_button.pack()   
    def main_prim(self):
        self.label_a1 = Label(text='Numbers:',bg = "orange",width=30)
        self.label_a1.pack()
        numbers(self)
    def main_secu(self):
        remove_numbers(self)
def numbers(self):
    print('Printing numbers:')
    # Loop to create numbers
    for i in range(10):
        print(i)
        self.label_a2 = Label(text=i,bg = "light green",width=30)
        self.label_a2.pack()
        print(self.label_a2)
def remove_numbers(self):
    print('Removing numbers:')
    try:
        for i in range(10):
            self.label_a2.destroy()
            root.update_idletasks()
            print('Removing',i)
    except:
        print('Generate numbers first')
my_gui = the_GUI(root)
root.mainloop()

运行脚本时,只有 9 号标签删除。如何让所有的实验室消失?请帮忙。

BR BaconFlip

解决方法

您可以将所有标签实例添加到列表中,然后在销毁它们的同时对其进行迭代,您的最终代码应该如下所示

from tkinter import *
root = Tk()

class the_GUI:
    def __init__(self,master):
        self.master = master
        master.title("Numbers")
        self.start_prim_button = Button(master,text="Get numbers",command=self.main_prim,width=30)
        self.start_prim_button.pack()   
        self.start_secu_button = Button(master,text="Remove numbers",command=self.main_secu,width=30)
        self.start_secu_button.pack()   
        self.label_list=[]
    def main_prim(self):
        self.label_a1 = Label(text='Numbers:',bg = "orange",width=30)
        self.label_a1.pack()
        numbers(self)
    def main_secu(self):
        remove_numbers(self)
def numbers(self):
    print('Printing numbers:')
    # Loop to create numbers
    for i in range(10):
        print(i)
        self.label_a2 = Label(text=i,bg = "light green",width=30)
        self.label_a2.pack()
        self.label_list.append(self.label_a2)
        print(self.label_a2)
def remove_numbers(self):
    print('Removing numbers:')
    try:
        for i in range(10):
            self.label_list[i].destroy()
            root.update_idletasks()
            print('Removing',i)
        self.label_a1.destroy()
        self.label_list=[]
    except:
        print('Generate numbers first')
my_gui = the_GUI(root)
root.mainloop()
,

另一种方法是使用 root.winfo_children() 获取根小部件的子部件,并使用 isinstance() 检查子部件是否是标签的实例。如果您不想将每个标签都存储在列表中,这可能适合您。

def remove_numbers(self):
    print('Removing numbers:')
    try:

        for i in self.master.winfo_children():
            if isinstance(i,Label):
                i.destroy()
                root.update_idletasks()
                print('Removing',i)
    except:
        print('Generate numbers first')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...