PyGTK: разрешить использование Tab в AccelGroup - PullRequest
3 голосов
/ 26 июля 2011

При использовании gtk.AccelGroup любая комбинация с символом Tab недопустима.Теперь я понимаю, что навигация по пользовательскому интерфейсу осуществляется с помощью этой клавиши, но в некоторых особых случаях мне нужно переопределить это поведение.Есть ли способ заставить AccelGroup разрешить использование этого ключа?

Например:

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

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Это ниже один из способов сделать это.Хотя, если вы не хотите, чтобы программа прослушивала каждое нажатие клавиши, как указано выше, я должен сказать, что я никогда не сталкивался с способом привязки 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 голос
/ 29 августа 2011

Вы можете легко получить имена и значения ключей с помощью этого:

 #!/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, вероятно, может быть использован. Ура, Louis

...