在Ruby中的GTK / Glade中检测修饰键(例如Ctrl-P)的简便方法?

时间:2013-09-24 06:27:53

标签: ruby gtk glade

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

笨重的方式是:

  1. 编写并绑定keypresskey-release处理程序
  2. 存储按下并释放我关心的修改键,知道它们何时被按下(左Ctrl 等,键不同)
  3. 检测按下我关心的字母键,并根据按下哪些修改键来区别对待它们。
  4. AccelGroup(请参阅下面的答案)似乎适用于大多数用途,但它们是按窗口而不是按窗口小部件。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

帽子提示和+1到“another.anon.coward。”

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