Python PyGTK:允许在AccelGroup中使用选项卡

Python PyGTK:允许在AccelGroup中使用选项卡,python,gtk,pygtk,Python,Gtk,Pygtk,使用gtk.AccelGroup时,任何带制表符的组合都无效。现在我明白了UI导航是使用这个键完成的,但在某些特殊情况下,我需要覆盖这个行为。有没有办法使AccelGroup允许使用此密钥 例如: group = gtk.AccelGroup() group.connect(gtk.gdk.keyval_from_name('Tab'), gtk.gdk.CONTROL_MASK, 0, callback) 您可以通过以下方式轻松获取密钥名称和值: #!/usr/bin/env python

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

例如:

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

您可以通过以下方式轻松获取密钥名称和值:

 #!/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()
#/usr/bin/env python
进口gtk
进口gtk
def catch_按钮(窗口、事件、标签):
keyval=event.keyval
name=gtk.gdk.keyval_name(keyval)
mod=gtk.accelerator\u get\u标签(keyval,event.state)
label.set_标记(“%s\n%d%”(mod,keyval))
window=gtk.window()
窗口。设置大小请求(640480)
label=gtk.label()
label.set\u use\u标记(True)
window.connect('key-press-event',catch_按钮,标签)
window.connect('destroy',gtk.main\u退出)
添加(标签)
window.show_all()
gtk.main()
但是我发现返回的键名依赖于语言环境,对我没有多大用处。可能可以使用keyval。 干杯
路易斯

下面这是一种方法。尽管您不希望程序像上面所说的那样监听每个按键,但我应该说,我从未遇到过将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()

这个抓取的Tab字符?是的,但问题是要将Tab的组合键连接到一个特定的方法,而不必每次按键都听。是的。只需运行上面的代码,找出要放入代码中的键值。它确实有效,但这不是我希望在程序中处理键值的方式。如果可能的话,我希望AccelGroup接受Tab字符。我也这么认为。我不知道gtk.keysyms。谢谢我发现在使用CellRenderAccel时,您可以指定不希望GTK解析快捷键,然后Tab键、箭头键和其他保留键可以工作。我想在AccelGroup中也有这样做的选择。