在PyQt5中接收手势(适用于Android)

Receive gestures in PyQt5 (for Android)(在PyQt5中接收手势(适用于Android))

本文介绍了在PyQt5中接收手势(适用于Android)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,这个问题以前已经问过了,但我还没有找到答案..

我正在尝试使用QLabel在图像之间左右滑动,但我的基于PyQt5的应用程序还没有成功地接收到任何手势事件。 以下是我所拥有的:

class MyViewer(QtWidgets.QLabel):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.setAttribute(QtCore.Qt.WA_AcceptTouchEvents)  # just gave it a try
        self.grabGesture(QtCore.Qt.SwipeGesture)

    def event(self, event):
        if event.type() == QtCore.QEvent.Gesture:  # <= this won't happen
            print("Hello event!")
        return super().event(event)

我也试图查找QtWidgets.QGestureEvent,但即使只打印出event.type(),我也只能看到看似与任何手势无关的事件(除了一些QToucheEvent实例)

类似的问题是this one、this one、this one,我甚至阅读了some documentation,但我还没有看到可用的示例。仅问题和示例C++代码片断..

我在Linux和Android上都使用了PyQt5.15.0,我还没有看到任何手势的痕迹。 我忘了做什么了?是否必须以某种方式设置父级?

推荐答案

您用几个手指滑动?根据the Qt forum的说法,Qt.SwipeGesture只有在两个或更多手指滑动时才会注册,具体取决于平台。一个手指表示为QtGui.QMouseEvent

如果您一直在使用两个或多个手指,也有可能您没有看到事件的原因是您没有明确地接受它们。docs说:

当QGesture到达您的小部件时,它默认情况下被接受。但是,最好始终显式接受或拒绝手势。一般规则是,如果您接受某个手势,则表示您正在使用它。如果你忽视它,你就对它不感兴趣。忽略某个手势可能意味着该手势将被提供给另一个目标对象,或者它将被取消。[...]忽略该手势将意味着永远不会再向您提供该手势。

这篇关于在PyQt5中接收手势(适用于Android)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:在PyQt5中接收手势(适用于Android)

基础教程推荐