防止鼠标在wxPython中命中窗口/屏幕边界

时间:2014-10-12 20:28:53

标签: opengl wxpython mouseevent wxwidgets

我使用wxPython和OpenGL窗格制作第一人称/相机视图,我想使用鼠标移动来控制相机角度。要做到这一点,我需要每帧x,y的鼠标移动。

我在其他环境中这样做的方法是在抓取移动数据后将光标移动到每帧末尾的屏幕中心 - 这样它就不会远离中心和窗外的界限。

我找到了wx.WarpPointer(x,y),它做了我想要的 - 除了它还发送EVT_MOTION,据我所知,这与真正的鼠标运动相同。所以它只是将视图移回到它开始的任何地方。

有没有办法区分WarpPointer和用户输入鼠标事件?或者某种方式巧妙地绑定到WarpPointer上的不同函数和StopPropagation,然后它才能影响这个框架的鼠标移动?

或者,是否有另一种方法可以在wxPython中执行此操作? CaptureMouse似乎很好,但它只是将指针锁定在窗口而不是屏幕边界。

1 个答案:

答案 0 :(得分:0)

在调用WarpPointer之前设置一个标志,并在EVT_MOTION处理程序中检查标志并相应地继续并重置标志。

def SomeMethod(self):
    self.isWarping = True
    wx.WarpPointer(x, y)

def OnMotion(self, evt):
    if self.isWarping:
        self.isWarping = False
        do something
    else:
        do something else