【问题标题】:Binding or protocol for tkinter exit on MacMac 上 tkinter 退出的绑定或协议
【发布时间】:2022-10-18 08:42:34
【问题描述】:

我的 tkinter 应用程序通常在 Mac 上运行,需要在退出时保存一些设置。如果通过单击窗口的关闭框退出应用程序,则以下操作非常有用:

root.protocol("WM_DELETE_WINDOW", saveAndQuit)

但是,在 Mac 上通过键入 Command-Q 退出更为自然,并且此协议绑定没有捕获该内容。

无论退出的确切方式如何,是否有一种有效的方法来绑定“此应用程序即将退出”?

【问题讨论】:

  • here 给出的答案可能会有所帮助 - 看起来 Mac OS 处理 Cmd+Q 的方式不同,您需要聪明地让它与您的协议处理程序合作。
  • 成功!我发布了这个作为完整性的答案。

标签: python tkinter binding


【解决方案1】:

谢谢你,JRiggles,成功的指点。这是有效的最小代码:

menubar = tk.Menu(root)
mac_app_menu = tk.Menu(menubar , name = "apple")
menubar.add_cascade(menu = mac_app_menu) 
root.createcommand("tk::mac::Quit" , save_and_quit)

我倾向于认为 root.bind('<Destroy>', ...) 是 tkinter 的一个遗漏 不会绝对捕获所有退出程序的方法。

顺便说一句,整个事情有点做作,因为它实际上并没有像看起来那样改变菜单栏上的内容,它只是改变了这个特定命令的作用。

【讨论】:

    【解决方案2】:

    有没有一种有效的方法来绑定“这个应用程序即将退出” 无论退出的确切方式如何?

    是的,root.bind('<Destroy>', save_and_quit)。但是你需要在你定义的函数中有event parameter

    def save_and_quit(event):
        #cleanup
    

    【讨论】:

    • 没有用, save_and_quit 从未被调用过。 JRiggles 的回答有效。
    猜你喜欢
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2019-01-14
    相关资源
    最近更新 更多