我试图捕获发生在wx.Frame内部的键盘事件,并且我期望以下代码捕获这些事件。wxpython捕获wx.Frame中的键盘事件
import logging as log
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.Bind(wx.EVT_KEY_UP, self.OnKeyDown)
self.Bind(wx.EVT_CHAR, self.OnKeyDown)
self.SetFocus()
self.Show(True)
def OnKeyDown(self, event=None):
log.debug("OnKeyDown event %s" % (event))
if __name__ == "__main__":
app = wx.App(False)
gui = MainWindow(None, "test")
app.MainLoop()
如果有人知道如何做到这一点,我将不胜感激一些帮助:然而,当我运行代码的处理器的onkeydown永远不会被调用。
我试着做这个改变,也尝试不使用日志包 - 只是打印。这两个变化都没有奏效 – Kevin 2012-01-11 07:21:59
@Kevin,你的意思是你的答案中的代码有效,而你的问题或答案中的代码不会,甚至消除了日志记录?你使用的是什么SO,Python和wxPython版本?这在win7和winXP,python 2.6,wxpython 2.8.11和2.8.12中测试过 – joaquin 2012-01-11 13:10:39
我使用的是Ubuntu 11.04 64bit,因为它看起来像你已经推导出来的。所以这是一个基于操作系统的怪癖,但将面板添加到框架是一个简单的解决方法。 – Kevin 2012-01-12 00:27:19