PyGTK:允许在AccelGroup中使用Tab

时间:2011-07-26 17:28:04

标签: python gtk pygtk

使用gtk.AccelGroup时,任何与Tab charater的组合都无效。现在我明白UI导航是使用此键完成的,但在某些特殊情况下我需要覆盖该行为。有没有办法让AccelGroup允许使用这个密钥?

例如:

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

2 个答案:

答案 0 :(得分: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()

但我发现返回的关键名是依赖于语言环境的,对我来说没什么用处。可能会使用keyval。 干杯, 路易斯

答案 1 :(得分: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()