【问题标题】:How to close a Mac application by Quit button from the menu bar如何通过菜单栏中的退出按钮关闭 Mac 应用程序
【发布时间】:2020-09-02 13:21:26
【问题描述】:

我使用 Python 中的 tkinter 库开发了一个 Mac 应用程序。如果我通过应用程序上的 File--> Close(或)关闭按钮关闭,它会正确关闭,但如果我通过菜单栏中的 Quit 选项关闭,它会挂起。我只是想调用 on_closure 函数来正确关闭应用程序,但我不知道在从菜单栏中按下退出按钮时如何调用该函数。

def on_closing():
            app.destroy()
app.protocol("WM_DELETE_WINDOW", on_closing)

我正在使用 Python 3.8 和 Mac 环境。 你能帮我解决这个问题吗?如果我们按应用程序名称(mediavalet)关闭--> 退出,它就开始挂起。要正确终止,我们需要调用 on_closure 方法。

更新:

应用程序中的菜单栏默认由 MAC 创建。我们需要在按下退出按钮时关闭应用程序。

【问题讨论】:

  • app.protocol("WM_DELETE_WINDOW", on_closing) 可以是代码中除函数之外的任何其他位置,但在 on_closing() 内部,例如 app.destroy()root.destroy()
  • 注意,您用我的答案更新了 Q,不建议用其中一个答案更新 Q。
  • 我刚刚更新了问题,是语法错误
  • @T.SURESH 请检查更新后的答案。如果这仍然不起作用,您必须向我们提供 MINIMUM REPRODUCIBLE EXAMPLE

标签: python python-3.x macos tkinter


【解决方案1】:

我从这个问题中得到的是,您的应用中有一个 Menu(图片中的那个 - 你说你没有创建那个菜单),它有一个 menu item 调用了quit,点击后应该会生成应用程序termination

试试这个:

import sys

def on_closing():
    app.quit()
    sys.exit()      

app.protocol("WM_DELETE_WINDOW", on_closing)

编辑
如果上述方法不起作用,请尝试在file 菜单中创建一个新菜单项并将命令指定为on_closing.

如果无法解决问题,您必须向我们提供 MINIMUM REPRODUCIBLE EXAMPLE 才能使用。

【讨论】:

  • 看上图就可以理解问题了。
  • @T.SURESH A) 那是您构建的应用程序吗? B)您是否在问如何实现一个菜单,该菜单将有一个“退出”按钮,允许您在单击时退出应用程序?如果是,我有一个简单的解决方案。
  • A.) 我的团队成员是的。 B.) 是的,菜单已经存在,我们需要正确关闭
  • 在这种情况下,您可能需要共享minimum reproducible code(我更喜欢只处理菜单创建的sn-p)。只是提示您需要将命令on_closing 分配给菜单项quit
  • @T.SURESH 请检查编辑后的答案,看看它是否适合您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多