Python 有没有一种方法可以一次性清除tkinter窗口中的所有小部件,而不直接引用它们?

Python 有没有一种方法可以一次性清除tkinter窗口中的所有小部件,而不直接引用它们?,python,tkinter,Python,Tkinter,我正试图完全清除一扇窗户。但是,我需要一种方法来一次性清除窗口上的每个小部件,而无需使用pack.forget()您可以使用一个简单的递归循环来列出主窗口的所有子窗口: def all_children (window) : _list = window.winfo_children() for item in _list : if item.winfo_children() : _list.extend(item.winfo_child

我正试图完全清除一扇窗户。但是,我需要一种方法来一次性清除窗口上的每个小部件,而无需使用
pack.forget()

您可以使用一个简单的递归循环来列出主窗口的所有子窗口:

def all_children (window) :
    _list = window.winfo_children()

    for item in _list :
        if item.winfo_children() :
            _list.extend(item.winfo_children())

    return _list
然后,只需使用以下列表:

widget_list = all_children(window)
for item in widget_list:
    item.pack_forget()

你需要做的是给你的主窗口设置一个框架,然后把所有需要清理的东西都放在框架内的某个点上。然后只需执行
frame\u name.destroy()

下面的示例有一个按钮,它创建了一个包含多个标签小部件和一个按钮的框架

该按钮调用一个方法,该方法将破坏帧及其所有内容

然后,可以使用第一个按钮再次创建帧

如果您有任何问题,请告诉我:

import tkinter as tk


class ExampleApp(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master = master
        self.some_frame = None

        tk.Button(self.master, text="Create new frame with widgets!", command = self.create_stuff).pack()

    def create_stuff(self):
        if self.some_frame == None:
            self.some_frame = tk.Frame(self.master)
            self.some_frame.pack()

            for i in range(5):
                tk.Label(self.some_frame, text = "This is label {}!".format(i+1)).pack()

            tk.Button(self.some_frame, text="Destroy all widgets in this frame!",
                      command= self.destroy_some_frame).pack()

    def destroy_some_frame(self):
        self.some_frame.destroy()
        self.some_frame = None

root = tk.Tk()
my_example = ExampleApp(root)
root.mainloop()

您可以对每个小部件使用destroy方法,例如,如果它是一个按钮,您可以编写btn1.destroy()并对所有小部件执行此操作。不建议使用忘记方法,因为它只从外观上删除小部件。

不使用pack\u-forget,您所说的
是什么意思。
将它们全部放在一个单独的框架中,并根据需要添加/删除框架?