wxPython:如何在SearchCtrl上监听EVT_KEY_DOWN?

2 投票
2 回答
1489 浏览
提问于 2025-04-16 06:55

在我的应用程序中,我想要一个搜索框,可能像 wx.SearchCtrl 提供的那样,里面包含搜索按钮和取消按钮。我还想知道用户什么时候按下 UpDown 键,这样我就可以浏览搜索结果。当我用 wx.TextCtrl 做演示时,我可以这样绑定事件:

self.textbox = wx.TextCtrl(self)
self.textbox.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown, self.textbox)

但是一旦我把 textbox 换成 wx.SearchCtrl,我就无法再捕捉到这个事件了。我能让绑定在 wx.SearchCtrl 上工作吗?还是说我必须自己实现一个 textbox,让它看起来像一个搜索框?

如果这很重要的话,我是在 Ubuntu(Gnome)上开发的,应用程序应该在 Linux 和 Windows 上都能正常运行。

2 个回答

0

使用不同的事件,可以参考文档

self.textbox = wx.SearchCtrl(self, style=wx.TE_PROCESS_ENTER)
self.Bind(wx.EVT_TEXT, self.OnKeyDown, self.textbox)
1

一个解决办法是使用 EVT_KEY_UP,也就是

self.textbox.Bind(wx.EVT_KEY_UP, self.OnKeyUp, self.textbox)

不过,这样的话,按键就不能重复使用了(你必须先松开按键,事件才会被触发)。我还在寻找更好的方法。

撰写回答