PYGTK перенаправить событие в TreeView - PullRequest
1 голос
/ 07 июля 2011

В PyGTK у меня есть Entry и TreeView.Когда TreeView сфокусирован, ключевые события (Up, Down, PageUp, PageDown) определенным образом перемещают выделение в представлении.Я хочу перехватить эти ключевые события, когда запись находится в фокусе, и перенаправить их в TreeView так, чтобы выделение было перемещено, как если бы TreeView было сфокусировано.

Я могу перехватить события нажатия клавиш в записи и определитьесли это для ключей, которые мне нужны, но у меня есть проблемы с передачей его в 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 здесь.)

Любая помощь приветствуется.

1 Ответ

3 голосов
/ 09 июля 2011

Примерно так должно работать:

    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()
...