Changes between Version 7 and Version 8 of PyGTK


Ignore:
Timestamp:
05/21/08 00:07:01 (16 years ago)
Author:
atzm
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PyGTK

    v7 v8  
    191191    gtk.main() 
    192192}}} 
     193 
     194== key-press-event の罠 == 
     195 * SCIM とかならキー入力が key-press-event に渡らないが,XIM だと渡ってしまうくさい. 
     196 * 例えば Return 入力時の動作をいじるとき,key-press-event をフックする方法を採ると SCIM とかは大丈夫でも XIM でおかしなことになる. 
     197 * キーバインドをシグナルに結びつける方法を採ればこの問題は解消する. 
     198{{{ 
     199#!python 
     200import gobject 
     201import gtk 
     202 
     203class EnterKeyPressTextView(gtk.TextView): 
     204    __gsignals__ = { 
     205        'enter-pressed': (gobject.SIGNAL_RUN_LAST|gobject.SIGNAL_ACTION, 
     206                          gobject.TYPE_NONE, (gobject.TYPE_INT,)) 
     207    } 
     208 
     209gobject.type_register(EnterKeyPressTextView) 
     210 
     211for mod in [0, gtk.gdk.SHIFT_MASK, gtk.gdk.CONTROL_MASK, gtk.gdk.MOD1_MASK]: 
     212    gtk.binding_entry_add_signal(EnterKeyPressTextView, gtk.keysyms.Return, mod, 
     213                                 'enter-pressed', gobject.TYPE_INT, mod) 
     214    gtk.binding_entry_add_signal(EnterKeyPressTextView, gtk.keysyms.KP_Enter, mod, 
     215                                 'enter-pressed', gobject.TYPE_INT, mod) 
     216 
     217if __name__ == '__main__': 
     218    import sys 
     219 
     220    e = EnterKeyPressTextView() 
     221    e.connect('enter-pressed', lambda _e, m: sys.stdout.write('mod:%d\n' % m)) 
     222 
     223    w = gtk.Window() 
     224    w.add(e) 
     225    w.connect('delete-event', lambda _w, _e: gtk.main_quit()) 
     226    w.set_default_size(640, 480) 
     227    w.show_all() 
     228 
     229    gtk.main() 
     230}}}