Python-keybinder用於在我的程序中設置全局熱鍵。 GtkToggleButton小部件用於檢索用戶的按鍵綁定(按鍵事件/按鍵釋放事件)。python-keybinder和右熱鍵字符串
用戶按下togglebutton並按下一些鍵(Left Control + t,f.e.)。 Togglebutton的事件(按鍵事件)返回「Control_L」和「t」。程序將其保存爲字符串「t」並調用keybinder.bind(「t」,callback)。用戶按下該熱鍵,......沒有任何反應。我經過一段時間的挖掘發現奇怪的事情 - keybinder瞭解「控制」(沒有_L/_R),「Alt」等,並不理解「Control_L」,「Alt_L」... 文檔說下一個:
從蟒-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: *
- 解析表示加速器的字符串。該
- 格式看起來像 「<控制>一」 或 「<移> < Alt鍵> F1」 或
- 「<發佈> 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
如何設置和使用keybinder無需更換 「Control_L」 向 「控制」, 「Alt_L」 到 「ALT」等等?
UPD:Linux的,Python的2.4-2.7
UPD2:我想看看「左側控制」和「控制權」之間的區別,並使用這些按鍵爲不同的按鈕。我怎樣才能用gtk.accelerator_parse()來做到這一點?有沒有辦法?
Thnx。
當窗口打開並處於活動狀態時,我已經在窗口上使用GtkCellRendererAccel作爲窗口小部件,但大部分時間窗口處於非活動狀態並且不可見。全球熱鍵(也許「系統熱鍵」將更加正確)是這些時刻所需要的。據我所知,GtkCellRendererAccel不能分配全局熱鍵,但也許我錯了。你能展示一個非常小的例子,或者鏈接到例子/更精確的文檔嗎? –
對不起,我第一次想念你的問題。 GtkCellRendererAccel將爲您顯示熱鍵,併爲用戶提供一個很好的界面來設置它們。要將keyval和修飾符屬性轉換爲[gtk.accelerator_parse](https://developer.gnome.org/pygtk/stable/class-gtkaccelgroup.html#function-gtk--accelerator-parse)的字符串,您需要致電[gtk.accelerator_name](https://developer.gnome.org/pygtk/stable/class-gtkaccelgroup.html#function-gtk--accelerator-name)。如果您堅持使用切換按鈕,則需要針對gtk.accelerator_get_default_mod_mask()屏蔽修飾符。 –
恩,是的。 gtk.accelerator_name()返回字符串與所有按下的鍵(修飾符和鍵),但我想看到「左控制」和「右控制」之間的區別,並使用這些鍵作爲不同的按鈕,而不是相同(只是「控制」 )。正如我之前寫的,Gtk必須明白Control_L和Control_R是不同的鍵,但gtk.accelerator_parse()不理解,即使我將mod掩碼設置爲gtk.gdk.MODIFIER_MASK(允許所有修飾符)。 –