И?? Иногда лучше помолчать, право слово.
Продолжая славную традицию отвечать самому себе...
Итак, нельзя использовать key_press_event(терминология pygtk),
вместо этого нужно использовать AccelGroup явно (или неявно
через ItemFactory[depricated]/UIManager).
Пример, который работает в любой раскладке:
import gtk
def pass_func(accel_group, acceleratable, keyval, modifier):
print "received", keyval, modifier
w = gtk.Window()
a = gtk.AccelGroup()
key, mod = gtk.accelerator_parse("<Control>W")
a.connect_group(key, mod, gtk.ACCEL_VISIBLE, pass_func)
w.add_accel_group(a)
w.show()
gtk.main()
Пример, который _не_ работает в любой раскладке:
import gtk
def wakeup(widget, event):
print event.keyval #тут подразумевается проверка keyval
print "Event number %d woke me up" % event.type
w = gtk.Window()
w.add_events(gtk.gdk.KEY_PRESS_MASK)
w.connect("key-press-event", wakeup)
w.show()
gtk.main()