Переадресация нажатий клавиш в GTK - PullRequest
0 голосов
/ 26 марта 2010

Я пишу немного кода для плагина Gedit. Я использую Python и интерфейс (очевидно) 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. Есть идеи?

Заранее спасибо людям.

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

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

Управление курсором / выделением TreeView напрямую, например:

path, column = browser.get_cursor()
browser.set_cursor((path[0] + 1,)) # Down
1 голос
/ 29 марта 2010

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

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