2017-05-22 3 views
0

私はノートブックといくつかのページでウィンドウを設定しようとしています。ページ内には、いくつかのエントリがあります(サンプルコードを参照)。Python gtkノートブックフォーカスチェーン

私は自分自身でタブキーと矢印キーを処理したいと思います。私は矢印をページタイトルにジャンプするキーを上げたくない、私は矢印の左/右のキーがページを巡回することを望んでいない。私は、タブキーが項目を順番に巡回することを望んでいません。

キー押下信号に接続し、タブまたは矢印キーを確認することは実際には機能しません。

私はフォーカスチェーンを変更しようとしましたが、ページタイトルまたは左/リジッド矢印のページを繰り返しています。

どのようなヘルプ/アイデアも高く評価されます。

#!/usr/bin/env python 

import pygtk 
import gtk 

class NotebookExample: 


    def __init__(self): 
     window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     window.set_size_request(200,200) 

     notebook = gtk.Notebook() 
     notebook.set_tab_pos(gtk.POS_TOP) 

     notebook.show() 

     hbox1 = gtk.HBox() 
     notebook.append_page(hbox1, gtk.Label("Page1")) 
     hbox2 = gtk.HBox() 
     notebook.append_page(hbox2, gtk.Label("Page2")) 

     window.add(notebook) 

     entry1 = gtk.Entry() 
     entry2 = gtk.Entry() 
     entry3 = gtk.Entry() 
     entry1.set_width_chars(5) 
     entry2.set_width_chars(5) 
     entry3.set_width_chars(5) 

     hbox1.pack_start(entry1, False, False, 10) 
     hbox1.pack_start(entry2, False, False, 10) 
     hbox1.pack_start(entry3, False, False, 10) 

     hbox1.set_focus_chain([entry2, entry3]) 

     window.show_all() 

def main(): 
    gtk.main() 
    return 0 

if __name__ == "__main__": 
    NotebookExample() 
    main() 

答えて

0

が見つかりました。

キープレスイベントに耳を傾け、イベントのために呼び出されてから、他のハンドラを停止するには、」真を返す。さらに、イベントを伝播する場合はFalse。

 window.connect("key-press-event", self.do_key_press) 

    def do_key_press(self, widget, event): 
     if gtk.gdk.keyval_name(event.keyval) == 'Tab': 
      print "tab" 
      return True 
     if gtk.gdk.keyval_name(event.keyval) == 'Left' or gtk.gdk.keyval_name(event.keyval) == 'Right': 
      print "cursor" 
      return True 
     return