2011-07-06 11 views
1

PyGTKでは、私はEntryとTreeViewを持っています。 TreeViewがフォーカスされると、キーイベント(Up、Down、PageUp、PageDown)はビュー内の選択を特定の方法で移動します。 Entryがフォーカスされているときにこれらの主要なイベントをインターセプトし、ツリービューにフォーカスを当てたように選択が移動されるようにTreeViewにリダイレクトします。PYGTKイベントをTreeViewにリダイレクト

Entryのキープレスイベントを傍受し、必要なキー用かどうかを判断できますが、TreeViewに渡すのに問題があります。

# In UI initialization 
    self.name_entry = gtk.Entry(max=0) 
    self.name_entry.connect('key-press-event', self.on_key_press) 

    store = self.create_store() # a simple ListStore is created here 

    view = gtk.TreeView(store) 
    rendererText = gtk.CellRendererText() 
    column = gtk.TreeViewColumn("Name", rendererText, text=0) 
    column.set_sort_column_id(0) 
    view.append_column(column) 
    self.tree_view = view 

    # ... 

def on_key_press(self, widget, event): 
    if event.keyval == UP: 
     self.tree_view.do_something() # ??? 
     return True 
    # etc. for other keyvals 

フォーカスがある間にキーが押されたかのように、tree_viewにイベントを処理させる方法はありますか?すべてのヘルプは高く評価され

;:

(私はここではPyGTK開発のベストプラクティスのために気にしないプログラムはハックであることに注意してください。)。

答えて

3

このような何か作業をする必要があります:

def on_key_press(self, widget, event): 
     if gtk.gdk.keyval_name(event.keyval) in ("Up", "Down", "Page_Up", "Page_Down"): 
      self.tree_view.grab_focus() 
      self.tree_view.emit('key_press_event', event) 
      self.name_entry.grab_focus() 
関連する問題