Python-keybinder 用于在我的程序中设置全局热键。GtkToggleButton 小部件用于从用户检索键绑定(key-press-event/key-release-event)。
用户按下切换按钮并按下一些键(左 Control + t,fe)。Togglebutton 的事件(按键事件)返回“Control_L”和“t”。程序将其保存到字符串“t”中并调用 keybinder.bind("t", callback)。用户按下该热键并且......没有任何反应。经过一段时间的挖掘,我发现了奇怪的事情 - keybinder 理解“Control”(没有 _L/_R)、“Alt”等,但不理解“Control_L”、“Alt_L”......文档接下来说:
python-keybinder 文档中的文本:
bind(...)
bind (keystring, callback, user_data) -> bool
Keystring should be in the format understood by
gtk.accelerator_parse. An example is '<Ctrl>space'.
来自 gtk/gtkaccelgroup.c 的文本:
- gtk_accelerator_parse: *
- 解析表示加速器的字符串。这
- 格式看起来像 "<Control>a" 或 "<Shift><Alt>F1" 或
- “<Release>z”(最后一个用于释放键)。
- 解析器相当自由,允许小写或大写,
- 以及诸如“<Ctl>”和“<Ctrl>”之类的缩写。
- 使用 gdk_keyval_from_name() 解析键名。
来自 gdk/gdkkeynames.c 的文本:
- gdk_keyval_from_name:*
- 将键名转换为键值。*
- 名字和里面的一样
- <gdk/gdkkeysyms.h> 头文件
- 但没有领先的“GDK_KEY_”。
好的,最后来自 gdk/gdkkeysyms.h 的文本:
205 #define GDK_KEY_Control_L 0xffe3
206 #define GDK_KEY_Control_R 0xffe4
如何在不将“Control_L”替换为“Control”、“Alt_L”替换为“Alt”等的情况下设置和使用键盘绑定器?
更新:Linux、Python 2.4-2.7
Upd2:我想看看“左控制”和“右控制”之间的区别,并将这些键用作不同的按钮。我怎样才能用 gtk.accelerator_parse() 做到这一点?有办法吗?
谢谢。