在GTK中转发按键输入
我正在为一个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