【问题标题】:How to bind Alt-F4 with Python tkinter?如何将 Alt-F4 与 Python tkinter 绑定?
【发布时间】:2017-06-08 23:01:06
【问题描述】:

我正在使用 Python 和 Tkinter 构建一个 GUI 应用程序。 我想控制程序在用户关闭时的行为。

我安装了一个新的WM_DELETE_WINDOW 协议,使用:

root = Tk()
root.protocol("WM_DELETE_WINDOW", lambda: closes_gracefully())

当用户点击标题栏上的X 按钮时,这确实有效,但当用户按下 ALT+F4 时,它就无效了。

我尝试绑定键序列:root.bind("<Alt-F4>", lambda: closes_gracefully()),但没有成功。

如何捕获 ALT+F4 事件?

【问题讨论】:

  • lambda: closes_gracefully() 只是 closes_gracefully,顺便说一句。
  • 刚刚在我的应用中尝试过,这对我来说效果很好:self.bind('<Alt-Key-F4>', self.whatever_your_want)
  • 您当前的代码对我来说很好。请添加minimal reproducible example
  • 请注意:Alt+F4 取决于平台,例如 Mac 使用 Cmd+Q / Cmd+W。

标签: python tkinter


【解决方案1】:

为此,您可以使用atexit.register

它的工作方式类似于程序关闭时执行的堆栈。每次你做register(function),这个函数都会被推到最前面。如果你添加了 a、b 和 c,它们会以相反的顺序执行(c、b、a)。

在你的情况下,你应该这样做:

register(closes_gracefully)

您应该注意,这几乎总是有效,除了崩溃(alt-f4 也有效,刚刚测试过)。

当函数不带参数时,您甚至可以使用register 作为装饰器:

@register
def bye():
    print("I'm out!")

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多