PYGTK redirect event to TreeView

杀马特。学长 韩版系。学妹 提交于 2020-01-05 10:04:50

问题


In PyGTK, I have an Entry and a TreeView. When a TreeView is focused, the key events (Up, Down, PageUp, PageDown) move selection in the view in a certain way. I want to intercept these key events when the Entry is focused, and redirect them to the TreeView so that the selection is moved as though the TreeView was focused.

I can intercept the key press events on the Entry and determine if it's for the keys I need, but I have trouble with passing it to the 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

Is there a way to make tree_view handle the event, as though the key was pressed while it had focus?

(Note: the program is a hack; I don't care for the best practices of PyGTK development here.)

Any help is appreciated.


回答1:


Something like this should work:

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


来源:https://stackoverflow.com/questions/6603530/pygtk-redirect-event-to-treeview

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!