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

时间:2016-05-05 12:56:25

标签: python event-handling wxpython panel

有人可以解释为什么添加一个面板会隐藏左右箭头键吗?

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应用程序。

1 个答案:

答案 0 :(得分:0)

实际上有两种用途可以解决这个问题。

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

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

或者在面板构造函数中定义wxpython window documentation中提到的wx.WANTS_CHARS,以允许它像这样捕获那些aditional字符:

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