【问题标题】:Why does wxPython panel masks key down event?为什么 wxPython 面板会屏蔽按键事件?
【发布时间】:2016-08-31 06:42:07
【问题描述】:

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

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 应用程序所必需的。

【问题讨论】:

    标签: python event-handling wxpython panel


    【解决方案1】:

    实际上有两种用途。

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

    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)
    

    【讨论】:

    • 我以为我试过这些,但你是对的,它确实有效。我还发现了一些奇怪的东西!如果按 Alt 键,我的问题代码会检测到左右箭头。这让我想到了使用事件列表!
    猜你喜欢
    • 2015-02-03
    • 2017-04-19
    • 1970-01-01
    • 2011-06-22
    • 2023-03-10
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多