【问题标题】:How to destroy all tkinter toplevel window opened如何销毁所有打开的 tkinter 顶级窗口
【发布时间】:2018-12-28 17:28:44
【问题描述】:

我这里有这几行代码,可以打开tkinter toplevel window,单击destroy all button 可以将其销毁。当我打开几个窗口并且我想摧毁所有只有一个被摧毁时的挑战。尝试了quit 功能,但它关闭了所有窗口,包括root window。我只想销毁所有顶层窗口。

import tkinter as tk




def open_window():
    global top1
    top1 = tk.Toplevel()

    top1.geometry("100x100")


def destroy_all():
    top1.destroy()



root = tk.Tk()
root.geometry("500x500")


b1 = tk.Button(root, text="open", command=open_window)
b1.pack(side=tk.TOP)


b2 = tk.Button(root, text="destroy all", command=destroy_all)
b2.pack(side=tk.BOTTOM)


root.mainloop()

【问题讨论】:

  • 您是否考虑过将窗口附加到列表而不是标量变量?
  • @BryanOakley 我不明白你的建议。

标签: python tkinter toplevel


【解决方案1】:

您可以遍历您创建的所有小部件,并销毁那些Toplevels

def destroy_all():
    for widget in root.winfo_children():
        if isinstance(widget, tk.Toplevel):
            widget.destroy()

【讨论】:

    【解决方案2】:

    我喜欢在处理动态生成的小部件/容器时使用列表。这里我会使用一个列表来保存 Toplevel,然后销毁列表中的每个 Toplevel。

    import tkinter as tk
    
    
    def open_window():
        list_of_tops.append(tk.Toplevel(root))
        list_of_tops[-1].geometry("100x100")
    
    
    def destroy_all():
        for top_window in list_of_tops:
            top_window.destroy()
    
    root = tk.Tk()
    root.geometry("500x500")
    list_of_tops = [] # list to store any toplevel window.
    tk.Button(root, text="open", command=open_window).pack(side=tk.TOP)
    tk.Button(root, text="destroy all", command=destroy_all).pack(side=tk.BOTTOM)
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多