Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wxpython EVT_CHAR回调未被调用_Python_Wxpython - Fatal编程技术网

Wxpython EVT_CHAR回调未被调用

Wxpython EVT_CHAR回调未被调用,python,wxpython,Python,Wxpython,我有一个OpenGL wxpython应用程序,我正试图在Ubuntu中使用它。它是(由其他人)在MacOSX上开发的,在那里工作得很好 我遇到的最后一个突出问题是没有捕获键盘事件 代码如下所示: class GLFrame(wx.Frame): def __init__(...): ... self.canvas.Bind(wx.EVT_MOTION, self.mouseMotion) self.canvas.Bind(wx.E

我有一个OpenGL wxpython应用程序,我正试图在Ubuntu中使用它。它是(由其他人)在MacOSX上开发的,在那里工作得很好

我遇到的最后一个突出问题是没有捕获键盘事件

代码如下所示:

class GLFrame(wx.Frame):
     def __init__(...):
         ...
         self.canvas.Bind(wx.EVT_MOTION, self.mouseMotion)
         self.canvas.Bind(wx.EVT_CHAR, self.character)
         ...

def character(self, evt):
    print "EVT_CHAR"
    # do stuff

def mouseMotion(self, evt):
    print "EVT_MOTION"
    # do stuff
我已经为Bind调用对整个代码库进行了grepped,没有其他东西使用EVT_CHAR、EVT_KET_DOWN或EVT_KEY_UP。我也试过EVT_KEY_DOWN和EVT_KEY_UP,但都不起作用

我还尝试从更改绑定调用

self.canvas.Bind(...)

这会中断EVT_运动,EVT_CHAR回调仍然不会被调用


在到达GLFrame之前,是否有任何调用可能捕获键盘事件?我是wxpython的新手,虽然这对我来说很有意义,但我确信有一些我不知道的“陷阱”

尝试绑定到框架而不是画布

class GLFrame(wx.Frame):
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)
        self.Bind(wx.EVT_MOTION, self.mouseMotion)
        self.Bind(wx.EVT_CHAR, self.character)


    def character(self, evt):
        print "EVT_CHAR"
        # do stuff

    def mouseMotion(self, evt):
        print "EVT_MOTION"

a = wx.App(redirect=False)
f = GLFrame(None,-1)
f.Show()
a.MainLoop()

根据wxpythongooglegroup,wx.Frame是否接收键盘事件取决于实现。Ubuntu实现没有接收到它们

发件人:

wx.Frames是否能够捕获关键事件不是由wx和 因此,依赖于实现。事实上,它可能在某些方面起作用 平台基本上只是一个快乐的巧合。我不太清楚这件事 GLCanvas类,但如果它有焦点,我希望它能够。 你可能想通过做一些事情来再次检查焦点在哪里 比如从计时器之类的东西中打印wx.Window.FindFocus()

事实证明,GLCanvas可以很好地接收键盘事件。不管什么原因,它都没有得到关注。召唤

self.canvas.SetFocus()

已修复问题。

画布是否有焦点?还可以尝试使用wx.ACCEPTS\u CHARS样式(我想就是这样了…),看起来样式是wx.WANTS\u CHARS。但是不起作用。非常确定画布有焦点。我试过这个(我问题的后半部分)。它没有修复EVT_字符,并且破坏了EVT_运动。你复制了这个精确的代码。。。因为它对我有用。。。您使用的wx版本是什么?什么蟒蛇?(TBH我在windows上,这可能就是为什么它对我有用…)有趣。我复制并粘贴了代码。EVT_运动正常,但EVT_字符已损坏。我正在运行Python 2.7.3和Python-wxgtk2.8.Im Py2.6,但我怀疑这就是问题所在。。可能是操作系统?…如果您先单击帧以确保它具有焦点,它是否工作?单击帧没有帮助。我可能会在某个地方添加一个文本字段,但这感觉像是一个黑客。。。
self.canvas.SetFocus()