Вы можете привязать к событию <Destroy>
в вашем окне. Внутри связанной функции вы можете делать все, что захотите, включая уничтожение окна root.
В следующем примере уничтожение Toplevel
windows уничтожит окно root.
import tkinter as tk
class Window(tk.Toplevel):
def __init__(self, root, label):
super().__init__(root)
self.root = root
label = tk.Label(self, text=label)
label.pack(padx=20, pady=20)
self.bind("<Destroy>", self.kill_root)
def kill_root(self, event):
if event.widget == self and self.root.winfo_exists():
self.root.destroy()
root = tk.Tk()
label = tk.Label(root, text="Root window")
label.pack(padx=20, pady=20)
w1 = Window(root, "This is a toplevel window")
root.mainloop()
Причина проверки того, что event.widget
равно self
, обусловлена тот факт, что функции, связанные с окном root или верхнего уровня, автоматически наследуются всеми дочерними элементами в этом окне. Вы хотите уничтожить окно root только тогда, когда фактическое окно верхнего уровня уничтожено.