我正在尝试捕捉按键,以便在按下给定组合时触发事件。
我一直在寻找有关如何入门的提示,我能找到的最简单的代码片段是Python - 我从here抓取了下面的代码。但是,当我从一个终端运行并点击一些键时,在“按一个键......”语句后没有任何反应。
我是傻瓜吗?任何人都可以解释为什么没有发生任何事情,或建议在Linux上实现这一目标的更好方法(考虑任何语言!)?
import Tkinter as tk
def key(event):
if event.keysym == 'Escape':
root.destroy()
print event.char
root = tk.Tk()
print "Press a key (Escape key to exit):"
root.bind_all('<Key>', key)
# don't show the tk window
root.withdraw()
root.mainloop()
答案 0 :(得分:3)
如果你不显示窗口,Tk似乎没有得到它。尝试:
import Tkinter as tk
def key(event):
if event.keysym == 'Escape':
root.destroy()
print event.char
root = tk.Tk()
print "Press a key (Escape key to exit):"
root.bind_all('<Key>', key)
# don't show the tk window
# root.withdraw()
root.mainloop()
适合我...
答案 1 :(得分:1)
您正在做的是在“原始”模式下阅读/dev/tty
。
正常Linux输入是“熟” - 已经为您处理了退格和行结尾。
要在“原始”模式下读取键盘等设备,您需要对IOCTL进行直接的Linux API调用。
请查看http://code.activestate.com/recipes/68397/以获取有关此问题的一些指导。是的,配方是在tcl中,但它提供了如何继续的提示。
答案 2 :(得分:1)
嗯,事实证明使用GNOME时有一个更简单的答案,它根本不涉及任何编程......
http://www.captain.at/howto-gnome-custom-hotkey-keyboard-shortcut.php
只需创建由组合键触发的脚本/可执行文件,并指向您在gconf-editor中创建的'keybinding_commands'条目。
为什么我没想到这个?
答案 3 :(得分:1)
或者(非Python选项)使用XBindKeys。
答案 4 :(得分:0)
tkinter'bind'方法仅在tkinter窗口处于活动状态时有效。
如果要绑定在所有桌面上都可以使用的击键组合(全局键/鼠标绑定),则可以使用bindglobal(与pip install bindglobal
一起安装)。它的工作方式与标准tkinter的“绑定”完全相同。
示例代码:
import bindglobal
def callback(e):
print("CALLBACK event=" + str(e))
bg = BindGlobal()
bg.gbind("<Menu-1>",callback)
bg.start()