wxPython触摸屏访问有更核心的访问吗?还是强制使用 ZoomGesture 的方法?

问题描述

用于 GestureEvents 的 wxPython API 将缩放、平移和旋转视为不同的事件,因此无法在它们之间进行无缝切换。有没有办法更好地访问更有用的信息或强制它检测每两个数字触摸作为缩放手势?

https://wxpython.org/Phoenix/docs/html/wx.GestureEvent.html

使用 wxPython,我实现了完全缩放和平移,并尝试为触摸屏添加手势。问题似乎是平移手势有点糟糕。 Zoom 给了我 ZoomFactor(),它是你的两个手指之间的距离,还有 GetPosition() 这实际上是你需要的所有内容,也包括平移。平移为您提供 Delta() 但您可以使用变量来解决该问题。

这里的问题是,如果 wxPython 一开始说我像平移手势一样移动,则它是平移功能,并且不会缩放。如果它说我先像变焦一样移动,我会完全按照我想要的方式进行平移和缩放。我实现了自己的矩阵并很好地使用了它,所以我只需要这些信息就可以进行正确的操作。

我必须在这里硬着头皮让它有点烂吗?或者有什么方法可以强制缩放模式手势?是否有其他方法可以获得更多核心方面并使 API 更像 Android TouchEvents,我可以使用它来正确构建它?


https://github.com/meerk40t/meerk40t/tree/853041cb4630ffccf8d9accee5a50d95b0c9da41

self.EnabletouchEvents(wx.TOUCH_ZOOM_GESTURE | wx.TOUCH_PAN_GESTURES)
self.scene.Bind(wx.EVT_GESTURE_PAN,self.on_gesture)
self.scene.Bind(wx.EVT_GESTURE_ZOOM,self.on_gesture)

    def on_gesture(self,event):
        """
        This code requires WXPython 4.1. The bind will fail otherwise.
        """
        if event.IsGestureStart():
            self.widget_scene.event(event.GetPosition(),'gesture-start')
        elif event.IsGestureEnd():
            self.widget_scene.event(event.GetPosition(),'gesture-end')
        else:
            try:
                zoom = event.GetZoomFactor()
            except AttributeError:
                zoom = 1.0
            self.widget_scene.event(event.GetPosition(),'zoom %f' % zoom)

关闭平移不会使 Zoom 更加混乱,它只是无法在 PanGesture Events 中完全工作。

我使用的是 wxPython 4.1,回退是不允许触摸屏。这至少适用于 MSW 和 OSX。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)