Python-keybinder用于在我的程序中设置全局热键。 GtkToggleButton小部件用于从用户检索键绑定(按键事件/键释放事件)。
用户按下togglebutton并按下某些键(Left Control + t,f.e。)。 Togglebutton的事件(按键事件)返回“Control_L”和“t”。程序将其保存到字符串“t”并调用keybinder.bind(“t”,回调)。用户按下该热键并且......没有任何反应。经过一段时间的挖掘后我发现奇怪的事情 - 键控器理解“控制”(没有_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的文字:
来自gdk / gdkkeynames.c的文字:
好的,最后来自gdk / gdkkeysyms.h的文字:
205 #define GDK_KEY_Control_L 0xffe3
206 #define GDK_KEY_Control_R 0xffe4
如何在不将“Control_L”替换为“Control”,“Alt_L”改为“Alt”等的情况下设置和使用键盘?
Upd:Linux,Python 2.4-2.7
Upd2:我希望看到“左控制”和“右控制”之间的区别,并将这些键用作不同的按钮。我怎么能用gtk.accelerator_parse()做到这一点?有办法吗?
日Thnx。
答案 0 :(得分:2)
GTK提供GtkCellRendererAccel来设置键绑定,这可能会更容易,因为您不必担心在两种键描述格式之间进行转换。
答案 1 :(得分:2)
只是为接受的答案添加一个例子,这里是python代码解决了我的问题:
>>> import gtk
>>> gtk.accelerator_name(ord(';'),gtk.gdk.MOD1_MASK)
'<Alt>semicolon'
功能文档位于http://www.pygtk.org/pygtk2reference/class-gtkaccelgroup.html#function-gtk--accelerator-name
修饰符常量位于:http://www.pygtk.org/pygtk2reference/gdk-constants.html#gdk-modifier-constants。