python - 在 Python 中使用 Tkinter 进行关键事件处理

标签 python event-handling tkinter keyboard-shortcuts keyevent

检查以下链接:

[PyObjC关键事件处理问题] Key Events Handling using PyObjC in Mac OS X

这是我最初的问题。我以某种方式设法找到了一个内置插件来解决关键事件管理,但使用的是 Python。它被称为 Tkinter。

from Tkinter import *

root = Tk()
def screenshot(*ignore): os.system("screencapture -s %s" % check_snapshot) 
root.bind('<Return>', greet)
root.mainloop(  )

按return(回车)键,会成功调用截图函数,并且可以运行。

现在,我正在寻找的是,每当我按下组合键时,比如 Command+Shift+4,上面的函数应该被调用。

对于 Command+Shift+3 和 Command+Shift+5 也应该以相同的方式完成。

这应该通过检查按下的键组合来完成,因此,应该调用它们各自的屏幕截图函数。

此外,此应用程序快捷方式不应仅依赖于此应用程序的窗口或框架,窗口/此窗口的框架不应可见,但快捷方式应起作用并触发其各自的功能。

root.withdraw()

这是隐藏 Tkinter 窗口的内置函数,但是我无法调用任何函数。这些功能仅适用于 Tkinter 窗口,否则快捷键不起作用。

如有任何帮助,我们将不胜感激。

最佳答案

Tkinter 事件仅在 tkinter 窗口具有焦点时起作用,并且要使其具有焦点,它必须是可见的。当另一个程序在前台时,您不能使用 tkinter 来处理事件。

事件的格式是<modifier-modifier-event-detail> , modifierevent 是可选的。事件类似于 KeyPress , ButtonPress , ButtonRelease等等。 Detail 提供更多细节,例如哪个键或哪个按钮。例如,<ButtonRelease-1>用于释放鼠标按钮 1(一个)。

修饰符是指定control、alt、delete或shift的地方,可以有多个。 Shift 有点特殊,因为它通常在 tkinter 看到它之前由操作系统解释。因此,例如,美式英语键盘上的“Shift-3”是“#”。因此,而不是 <Shift-3>你会用 <#> .

将所有这些放在一起,command-shift-3 将是 <Command-#> .但是,如果您在 Mac 上执行此操作,它将拦截该事件并进行屏幕截图,因此该绑定(bind)仅适用于 Windows 和 Linux。在每个操作系统上,都有一些您无法覆盖的键绑定(bind)。

用于指定事件的格式的最佳描述是 tcl/tk man page on bind .即使你问的是 tkinter,底层引擎是 tcl/tk。

关于python - 在 Python 中使用 Tkinter 进行关键事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19650779/

相关文章:

python - Pandas :获得假人

c++ - 如何在 Qt 控制台应用程序中处理按键事件?

apache-flex - Flex 3 事件在复合自定义组件上传播?

ios - 确定事件发送者的最佳方法

python - 单选按钮 tkinter 传递主机值

python - 我如何判断哪个小部件触发了 Tkinter 中的事件?

python - 如何捕获Python中的RecursionError?

python - 如何从astropy erfa中取出WGS84轴

python - 如何旋转数据框

python - 如何在 tkinter python 中为变量指定不同的名称