你可以使用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