使用gtk.AccelGroup时,任何与Tab charater的组合都无效。现在我明白UI导航是使用此键完成的,但在某些特殊情况下我需要覆盖该行为。有没有办法让AccelGroup允许使用这个密钥?
例如:
group = gtk.AccelGroup()
group.connect(gtk.gdk.keyval_from_name('Tab'), gtk.gdk.CONTROL_MASK, 0, callback)
答案 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()