为什么 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)
谁能解释为什么添加面板会隐藏左右箭头键?
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)