2010-03-26 3 views
0

Я пишу немного кода для плагина Gedit. Я использую Python, и интерфейс (очевидно) - это GTK.Переадресация нажатий клавиш в GTK

Итак, проблема, с которой я сталкиваюсь, довольно проста: у меня есть окно поиска (gtk.Entry), а справа внизу у меня есть окно результатов (gtk.TreeView). Сразу после того, как вы напечатаете что-то в окне поиска, вам предлагается множество результатов, и я хотел бы, чтобы пользователь мог нажимать клавиши «Вверх»/«Вниз», чтобы выбрать один, «Ввод», чтобы выбрать его, и сделать это. Дело в том, что я не могу найти способ переместить вверх/вниз нажатие на 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

+1

В таком случае, можете ли вы снова «grab_focus» в записи снова? –

+0

@ Джоханн хммм ... может быть. Я не пытался, потому что это казалось неправильным. – dguaraglia

ответ

1

Вы включили key-press-event в список событий, которые разрешен виджет? Вы можете сделать это по телефону

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

Я проверю это, хотя я предполагаю, что это так, потому что я могу просматривать TreeView с помощью клавиш со стрелками. – dguaraglia

1

не правильный ответ на вопрос (я не знаю, как передать нажатие клавиши), но есть альтернативное решение вашей проблемы.

Манипулирование TreeView курсор/выбор непосредственно, например:

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

Да, возможно, это лучший способ пойти. Вместо того, чтобы переадресовывать нажатие клавиши, я просто изменил положение в списке. Теперь мне нужно найти способ сосредоточиться, чтобы оставаться на входе, когда вы нажимаете «Вниз». – dguaraglia

+1

Я думаю, что вы можете сделать это с помощью [return True] (http://library.gnome.org/devel/gtk/unstable/GtkWidget.html#GtkWidget-key-press-event) из обработчика события key-press-event. –

Смежные вопросы