1

我正在寻找一种方法来从小部件的处理程序中检测组合键,例如Ctrl+P序列(按住rightleft Ctrl按下P键) 。key_press_event似乎没有任何简单干净的方法来判断修饰键是否被按住。

笨拙的方法是:

  1. 编写和绑定两者keypresskey-release处理程序
  2. 存储我关心的修饰键的按下和释放,以了解它们何时被按住(rightleft Ctrl等,键不同)
  3. 检测我关心的字母键的按下,并根据按下的修饰键对它们进行不同的处理。

AccelGroup(见下面的答案)似乎适用于大多数目的,但它们是每个窗口,而不是每个小部件。

4

2 回答 2

3

当您获得按键事件时,事件结构 (GdkEventKey) 有一个名为的成员state,它告诉您当前按下了哪些修饰符(包括鼠标按钮)。您将需要使用 ruby​​ 版本来屏蔽状态,gtk_accelerator_get_default_mod_mask以屏蔽大写锁定和数字锁定等。

于 2013-09-26T09:12:59.900 回答
1

加速器组似乎完成了我所寻找的大部分工作。Ruby 文档位于http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?Gtk%3A%3AAccelGroup中。

看起来 AccelGroup 可以将组合键绑定到块或闭包,然后将 AccelGroup 添加到窗口中。

给“another.anon.coward”的小费和 +1。

(但是,它们是每个窗口,而不是每个小部件。)

于 2013-09-24T21:17:35.517 回答