Как закрыть родительское окно, когда дочернее окно закрыто в tkinter - PullRequest
0 голосов
/ 30 марта 2020

я делаю GUI и в нем я скрываю root. Поэтому, когда я закрываю окно, которое отображается с помощью стрелки x, я не хочу, чтобы вся программа заканчивалась, а не только тем окном, которое можно увидеть. В противном случае у пользователя возникнут проблемы при закрытии программы. My root скрыто,
имя входа видно,
, когда имя пользователя закрыто с помощью красного x сверху, я хочу закрыть root а как это сделать?

1 Ответ

0 голосов
/ 30 марта 2020

Вы можете привязать к событию <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 только тогда, когда фактическое окно верхнего уровня уничтожено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...