GTK:检查KeyEvent,包括shift键

时间:2015-07-01 19:04:28

标签: gtk gdk

在我的应用程序中,我想使用组合键<Ctrl><Shift><#>检查GTK key_press事件。
我的代码:(在这种情况下,Python,但问题是与语言无关,我猜)

def on_key_press(self, widget, event):
    if ((event.keyval == Gdk.KEY_numbersign) \  # The problem
    and (event.state & Gdk.ModifierType.SHIFT_MASK) \
    and (event.state & Gdk.ModifierType.CONTROL_MASK)):

        dosomethingamazing()

Gtk处理按键的方式,实际的键(例如&#34; a&#34;)和shift键组合成一个大写的A.所以当QWERTZ布局上的numberign键被替换为撇号键时按下shift键。 此组合的event.keyval是39(撇号),而不是35(numbersign)。 因此,对于<Ctrl><Shift><#>,我需要检查numberign的大写等价物,而不是在不同的键盘布局上可能有所不同的numbersign,因此我无法对其进行硬编码。

问题如下:

>>> Gdk.keyval_to_upper(35)  # 35 is the Key Value for numbersign
35
>>> Gdk.keyval_is_upper(35)
True
>>> Gdk.keyval_is_lower(35)
True

我无法使用这些函数获得大写等效项。有关如何获取<shift><whateverkey>组合结果的任何想法,其中keyval_to_upper()失败了吗?

0 个答案:

没有答案