猿问

以编程方式按下工具栏上的“X”按钮?

我知道我可以拦截按下X按钮,protocol("WM_DELETE_WINDOW", do_something)但是我很难弄清楚如何激活此按钮或至少是按下此按钮时触发的协议。

这是情况。我有2节课。我的主要Tk班级和我的Menu班级。当我设置命令以使用exit菜单中的按钮关闭程序时,我希望此按钮XTk类上的按钮执行完全相同的操作。

现在我知道我可以简单地调用传递给菜单类的控制器,然后调用我构建的方法来处理关闭事件,但是我正在尝试以不需要这样做的方式构建这个菜单类菜单类。这将允许我在几乎不需要编辑的情况下在我构建的任何应用程序上使用菜单类。

我无法找到告诉我如何以编程方式激活"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)


函数式编程
浏览 149回答 3
3回答
随时随地看视频慕课网APP

相关分类

Python
我要回答