Я знаю, что могу перехватить нажатие кнопки X
с помощью protocol("WM_DELETE_WINDOW", do_something)
, однако мне трудно понять, как активировать эту кнопку или, по крайней мере, протокол, который срабатывает при нажатии этой кнопки.
Вот ситуация. У меня есть 2 класса. Мой основной Tk
класс и мой Menu
класс. Когда я настраиваю команду на закрытие программы с помощью кнопки exit
из меню, я хочу, чтобы эта кнопка выполняла ту же функцию, что и кнопка X
в классе Tk
.
Теперь я знаю, что могу просто вызвать контроллер, который был передан в класс меню, а затем вызвать метод, который я построил для обработки события закрытия, однако я пытаюсь создать этот класс меню таким образом, чтобы мне не нужно было сделать это из класса меню. Это позволит мне использовать класс меню в любом приложении, которое я создаю, практически без редактирования.
Мне не удалось найти сообщение или какую-либо документацию, в которой говорилось бы, как я могу программно активировать протокол "WM_DELETE_WINDOW"
.
Вот изображение, если неясно, чего я хочу. Просто я хочу, чтобы кнопка выхода делала то же, что и кнопка X
.
Основной класс:
import tkinter as tk
import PIP_MENU
class PIP(tk.Tk):
def __init__(self):
super().__init__()
PIP_MENU.start(self)
self.protocol("WM_DELETE_WINDOW", self.handle_close)
def handle_close(self):
print("Closing")
self.quit()
if __name__ == '__main__':
PIP().mainloop()
Класс меню в отдельном .py
файле:
import tkinter as tk
class Menu(tk.Menu):
def __init__(self, controller):
super().__init__()
self.controller = controller
controller.config(menu=self)
file_menu = tk.Menu(self, tearoff=0)
self.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="Exit", command=self.handle_exit)
def handle_exit(self):
# What can I do here that will be handled by
# protocol "WM_DELETE_WINDOW" of the main class?
# All I can find is destroy() and quit()
# But both of these do not get handled by "WM_DELETE_WINDOW".
def start(controller):
Menu(controller)