Как уничтожить все открытые окна tkinter toplevel
У меня есть несколько строк кода, который открывается 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()
2 ответа
Вы можете перебрать все созданные вами виджеты и уничтожить те, которые Toplevels
def destroy_all():
for widget in root.winfo_children():
if isinstance(widget, tk.Toplevel):
widget.destroy()
Мне нравится использовать список при работе с динамически генерируемыми виджетами / контейнерами. Здесь я бы использовал список, чтобы удерживать Топлевел, а затем уничтожать каждый Топлевел в списке.
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()