为什么 wxPython 面板会屏蔽按键事件?

Why does wxPython panel masks key down event?

谁能解释为什么添加面板会隐藏左右箭头键?

import wx
class AForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Press Key")
        panel = wx.Panel(self, wx.ID_ANY)
        panel.Bind(wx.EVT_KEY_DOWN, self.onKeyPress)
        self.Show()
    def onKeyPress(self, event):
        keycode = event.GetKeyCode()
        print keycode
app = wx.App()
form = AForm()
app.MainLoop()

如果我卸下面板就可以了!但是,面板似乎是使表单看起来像 Windows 应用程序所必需的。

实际上,您可以使用两种方法。

要么在面板上调用 wx.EVT_CHAR_HOOK 而不是 wx.EVT_KEY_DOWN,(尽管这样事件会一直传播到父级 window(框架),而不是由专家组严格处理,所以我认为您最好选择第二个选项):

panel.Bind(wx.EVT_CHAR_HOOK, self.onKeyPress)

或者您在面板构造函数中定义它 wx.WANTS_CHARS,如 wxpython window documentation 中所述,以允许它像这样捕获那些附加字符:

panel = wx.Panel(self, wx.ID_ANY, style= wx.WANTS_CHARS)
panel.Bind(wx.EVT_KEY_DOWN, self.onKeyPress)