PyGTK: 允许在AccelGroup中使用Tab键

3 投票
2 回答
531 浏览
提问于 2025-04-16 22:18

在使用gtk.AccelGroup的时候,任何和Tab键组合的快捷键都是无效的。我明白这个键是用来在界面中导航的,但在某些特殊情况下,我需要改变这个行为。有没有办法让AccelGroup允许使用这个键呢?

例如:

group = gtk.AccelGroup()
group.connect(gtk.gdk.keyval_from_name('Tab'), gtk.gdk.CONTROL_MASK, 0, callback)

2 个回答

1

下面是一种实现方法。不过,如果你不想让程序监听每一次按键,就像你之前说的那样,我得说我从来没有找到过把Tab键和AccelGroup绑定在一起的方法。我自己尝试过很多种方法,但都没有成功。

widget.connect("key-press-event",self.on_key_pressed)

def on_key_pressed(self,widget,event,*args):
    if event.keyval == gtk.keysyms.Tab:
      do_something()
1

你可以很简单地用这个方法获取键名和对应的值:

 #!/usr/bin/env python

 import gtk
 import gtk

 def catch_button(window, event, label):
    keyval = event.keyval
    name = gtk.gdk.keyval_name(keyval)
    mod = gtk.accelerator_get_label(keyval, event.state)
    label.set_markup('<span size="xx-large">%s\n%d</span>'% (mod, keyval)) 


 window = gtk.Window()
 window.set_size_request(640,480)
 label = gtk.Label()
 label.set_use_markup(True)
 window.connect('key-press-event',catch_button, label)
 window.connect('destroy', gtk.main_quit)
 window.add(label)
 window.show_all()

 gtk.main()

不过我发现返回的键名是和地区有关的,对我来说没什么用。键值可能会有用。

谢谢,

路易斯

撰写回答