转发GTK中的按键

时间:2010-03-26 20:39:29

标签: python gtk keypress forwarding

我正在为Gedit插件编写一些代码。我正在使用Python,界面(显然)是GTK。

所以,我遇到的问题很简单:我有一个搜索框(gtk.Entry),就在下面我有一个结果框(gtk.TreeView)。在搜索框中输入内容后,您会看到一堆结果,我希望用户能够按向上/向下键选择一个,按Enter键选择它,然后完成。事实上,我似乎无法找到将Up / Down按键转发到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 个答案:

答案 0 :(得分:1)

您是否在允许小部件接收的事件列表中包含key-press-event?你可以通过调用

来做到这一点
browser.add_events(gtk.gdk.KEY_PRESS_MASK)

答案 1 :(得分:1)

对这个问题不是一个正确的答案(我不知道如何转发按键),但是你的问题有另一种解决方案。

直接操作TreeView光标/选择,例如:

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