2010-01-27 13 views
6

Ho un gestore di eventi key-press e devo determinare quale tipo di tasto è stato premuto: modificatore o no?pygtk: Determinare la chiave è un modificatore

Non è in event.state, perché questo campo funziona solo quando il modificatore è stato premuto con qualcos'altro, ma ho bisogno di questo per la chiave singola (cioè semplicemente premendo control o alt, ...).

risposta

4

Se la versione di GTK +/PyGTK è abbastanza recente, eventi chiave hanno un attributo is_modifier. Non è documentato nel riferimento PyGTK, ma è nella documentazione dell'API GDK ed è esposto tramite PyGTK. È stato aggiunto in GDK 2.10.

2

Troverete ciò che state cercando in event.keyval. Ad esempio, il seguente codice funziona per me:

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

Ho qualcosa di simile a quello che hai mostrato, ma molto più grande: MODIFIERS = ( gtk.keysyms.Control_L, ..... gtk.keysyms.Hyper_L, gtk.keysyms.Hyper_R , gtk.keysyms.Meta_L, gtk.keysyms.Meta_R, ) .... se event.keyval in MODIFICATORI: .... ma ho pensato che ci potrebbe essere qualche altro approccio – Daniel

Problemi correlati