开发者

PyGTK: Allow usage of Tab in AccelGroup

When using gtk.AccelGroup any combination with Tab charater is invalid. No开发者_Python百科w I do understand that UI navigation is done using this key but in some special cases I need to override that behavior. Is there a way to make AccelGroup allow usage of this key?

For example:

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


You can easily get key names and values with this :

 #!/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()

But I found that the keynames returned were locale-dependent, of no great use for me. The keyval can probably be used. Cheers, Louis


This below is one way to do it. Although if you don't wish for the program to listen for every keypress as you stated above, I should say that I've never run across a way of tying Tab to an AccelGroup. I've tried various things myself, but to no avail.

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()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜