2010-01-27 7 views
6

Ich habe Key-Press-Event-Handler und ich muss bestimmen, welche Art von Taste gedrückt wurde: Modifizierer oder nicht?pygtk: Ermitteln Schlüssel ist ein Modifikator

Es ist nicht in event.state, weil dieses Feld nur funktioniert, wenn Modifier mit etwas anderem gedrückt wurde, aber ich brauche dies für einzelne Taste (d. H. Einfach die Steuerung oder Alt drücken, ...).

Antwort

4

Wenn Ihre Version von GTK +/PyGTK neu genug ist, wichtige Ereignisse haben ein is_modifier Attribut. Es ist nicht in der PyGTK-Referenz dokumentiert, aber es ist in der GDK-API-Dokumentation und wird durch PyGTK verfügbar gemacht. Es wurde in GDK 2.10 hinzugefügt.

2

Sie finden, was Sie in event.keyval suchen. Zum Beispiel arbeitet der folgende Code für mich:

def key_press_event(widget, event): 
    keyname = gtk.gdk.keyval_name(event.keyval) 
    if "Control" in keyname or "Alt" in keyname: 
     print "You pressed a modifier!" 
+0

ich habe so etwas wie, was Sie gezeigt haben, aber viel größer: MODIFIKATOREN = ( gtk.keysyms.Control_L, ..... gtk.keysyms.Hyper_L, gtk.keysyms.Hyper_R , gtk.keysyms.Meta_L, gtk.keysyms.Meta_R, ) .... wenn event.keyval in MODIFIKATOREN: .... aber ich dachte, es könnte einige andere Ansatz – Daniel