Python-keybinder を使用して、プログラムでグローバル ホットキーを設定します。GtkToggleButton ウィジェットは、ユーザーからキーバインディングを取得するために使用されます (key-press-event/key-release-event)。
ユーザーがトグルボタンを押し、いくつかのキーを押します (左コントロール + t、fe)。トグルボタンのイベント (key-press-event) は、"Control_L" と "t" を返します。プログラムはこれを文字列 "t" に保存し、keybinder.bind("t", callback) を呼び出します。ユーザーがそのホットキーを押しても...何も起こりません。しばらく掘り下げた後、奇妙なことがわかりました-キーバインダーは「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" (最後の 1 つはキー リリース用です)。
- パーサーはかなりリベラルで、小文字または大文字を使用できます。
- また、「<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() でこれを行うにはどうすればよいですか? 方法はありますか?
サンクス。