我知道我可以拦截按下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)
相关分类