擅长:python、mysql、java
<p>你可以用EVT_CHAR_HOOK</p>
<pre><code> self.Bind(wx.EVT_CHAR_HOOK, self.hotkey)
def hotkey(self, event):
code = event.GetKeyCode()
if code == wx.WXK_LEFT: # or whatever...
...
</code></pre>
<p>或者使用加速表</p>
<pre><code> ac = [(wx.ACCEL_NORMAL, wx.WXK_LEFT, widget.GetId())]
tbl = wx.AcceleratorTable(ac)
self.SetAcceleratorTable(tbl)
</code></pre>
<p>您需要在加速器表中使用一个按钮或widgets的ID,按下该按钮将触发widgets的事件处理程序。</p>
<p>如果没有希望触发其事件的小部件,并且希望某种具有事件绑定的“不可见”小部件,则可以执行以下操作:</p>
<pre><code> 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)
</code></pre>
<p>我遍历要绑定到的感兴趣的键,并为它们创建新的widgets id。然后使用这些id将菜单项绑定到(加速器键触发的)并在加速器表的元组列表中使用这些id。</p>