你可以使用EVT_CHAR_HOOK,
self.Bind(wx.EVT_CHAR_HOOK, self.hotkey)
def hotkey(self, event):
code = event.GetKeyCode()
if code == wx.WXK_LEFT: # or whatever...
...
,或者使用加速器表
ac = [(wx.ACCEL_NORMAL, wx.WXK_LEFT, widget.GetId())]
tbl = wx.AcceleratorTable(ac)
self.SetAcceleratorTable(tbl)
你会ñ在加速器表中使用按钮或小部件的ID,按下按钮将触发小部件的事件处理程序。
如果你没有小工具,你想他们的事件被触发,而宁愿某种“隐形”窗口小部件有事件绑定,那么你可以这样做:
ac = []
keys = [wx.WXK_LEFT, wx.WXK_RIGHT, wx.WXK_UP, wx.WXK_DOWN]
for key in keys:
_id = wx.NewId()
ac.append((wx.ACCEL_NORMAL, key, _id))
self.Bind(wx.EVT_MENU, self.your_function_to_call, id=_id)
tbl = wx.AcceleratorTable(ac)
self.SetAcceleratorTable(tbl)
我遍历在感兴趣的键上进行绑定,并为它们创建新的小部件ID。然后,我使用这些ID将菜单项绑定到(哪些加速键触发),并在加速器表的元组列表中使用这些ID。
对不起,您如何将按键事件绑定到文本框?因为这正是我需要的! 'wx.EVT_KEY_DOWN(self.NudgeTxt,self.OnKeyDown)'似乎并没有为我工作 – phunehehe 2010-11-09 08:15:47