2010-03-26 74 views
0

我正在爲Gedit插件編寫一些代碼。我使用Python和接口(顯然)是GTK。轉發GTK中的按鍵

所以,我遇到的問題很簡單:我有一個搜索框(一個gtk.Entry),正下方有一個結果框(一個gtk.TreeView)。在搜索框中鍵入內容後,您會看到一堆結果,我希望用戶能夠按上/下鍵選擇一個,然後按Enter鍵選擇它並完成。事情是,我似乎無法找到一種方法來將向上/向下按鍵轉發給TreeView。目前我有這段代碼:

def __onSearchKeyPress(self, widget, event): 
    """ 
    Forward up and down keys to the tree. 
    """ 
    if event.keyval in [gtk.keysyms.Up, gtk.keysyms.Down]: 
     print "pressed up or down" 
     e = gtk.gdk.Event(gtk.gdk.KEY_PRESS) 
     e.keyval = event.keyval 
     e.window = self.browser.window 
     e.send_event = True 
     self.browser.emit("key-press-event", e) 
     return True 

我可以清楚地看到我收到了正確的事件,但我發送事件,但TreeView的忽略。有任何想法嗎?

在此先感謝的人。

+1

顯然調用 self.browser.grab_focus() 發送該事件有助於問題之前,但我還是想保持專注輸入框。仍在努力。 – dguaraglia 2010-03-30 00:11:38

+1

在這種情況下,您是否可以在以後再次對條目執行「grab_focus」操作? – 2010-03-31 21:01:28

+0

@Johannes嗯......也許。我沒有嘗試,因爲它看起來不正確。 – dguaraglia 2010-04-01 12:58:31

回答

1

您是否將key-press-event包含在小部件允許接收的事件列表中?你可以通過調用

browser.add_events(gtk.gdk.KEY_PRESS_MASK) 
+0

我會檢查,雖然我認爲是這樣,因爲我可以使用箭頭鍵瀏覽TreeView。 – dguaraglia 2010-03-30 00:10:36

1

不是正確答案的問題(我不知道如何轉發按鍵),但有一個替代解決您的問題。

直接操縱的TreeView光標/選擇,例如:

path, column = browser.get_cursor() 
browser.set_cursor((path[0] + 1,)) # Down 
+0

是的,也許這是最好的選擇。而不是轉發按鍵,我只是自己改變列表上的位置。現在,我只需要找到一種方法,一旦按下「關閉」按鈕,就可以將注意力集中在Entry上。 – dguaraglia 2010-04-01 12:59:46

+1

我想你可以通過按鍵事件處理程序[返回True](http://library.gnome.org/devel/gtk/unstable/GtkWidget.html#GtkWidget-key-press-event)來實現。 – 2010-04-02 07:17:15