在GTK中转发按键输入

0 投票
2 回答
2888 浏览
提问于 2025-04-15 20:54

我正在为一个Gedit插件写代码,使用的是Python,界面是GTK。

我遇到的问题其实很简单:我有一个搜索框(gtk.Entry),下面是一个结果框(gtk.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

我能清楚地看到我收到了正确的事件,但我发送的事件在结果框里却被忽略了。有没有什么好主意?

提前谢谢大家。

2 个回答

1

你有没有把 key-press-event 加入到这个小部件可以接收的事件列表里?你可以通过调用下面的代码来做到这一点。

browser.add_events(gtk.gdk.KEY_PRESS_MASK)
2

这不是对问题的直接回答(我不知道怎么转发按键),但有一个替代的解决方案可以解决你的问题。

直接操作TreeView的光标或选择,比如:

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

撰写回答