在pyqtgraph中检测mouseReleaseEvent。继承问题。

2024-10-01 02:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

不幸的是,Pyqtgraph不能提供mouseRelease信号。在

因此,我想修改pyqtgraphsGraphicsScene类中的mouseReleaseEvent方法,以发出自定义信号。在

但是在下面的例子中,mouseReleaseEvent函数重写了QWidget父对象中的等效方法,而不是pyqtgraph中的等效方法。我如何解决和改变这个方法,或者有更简单的方法来检测鼠标按钮的释放?在

import sys, pyqtgraph
from PyQt5 import QtGui, QtWidgets

class Window(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self)
        layout = QtGui.QGridLayout(self)
        view = pyqtgraph.GraphicsLayoutWidget()
        layout.addWidget(view,0,0)
        view.scene().sigMouseClicked.connect(self.OnClick)
    def OnClick(self):
        print("click") # This works inside the GraphicsLayoutWidget.
    def mouseReleaseEvent(self,ev): # This does only work outside the pyqtgraph widget. It overrides the method in QWidget and not in pyqtgraph.GraphicsScene()
        print("released ",ev)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    form = Window()
    form.show()
    sys.exit(app.exec_())

Tags: the方法importselfview信号initdef
1条回答
网友
1楼 · 发布于 2024-10-01 02:26:55

所以,我不知道这是否特别聪明,但是我想出了一个解决方案,它使用一个单独的计时器来跟踪clickEvents的存在。我希望这对有类似问题的人有所帮助。在

import sys, pyqtgraph
from PyQt5 import QtGui, QtWidgets, QtCore

class Window(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self)
        layout = QtGui.QGridLayout(self)
        self.view = pyqtgraph.GraphicsLayoutWidget()
        self.timer = QtCore.QTimer()
        layout.addWidget(self.view,0,0)
        self.proxy = pyqtgraph.SignalProxy(self.view.scene().sigMouseMoved, rateLimit=30, slot=self.OnMouseMove)
        self.view.scene().sigMouseClicked.connect(self.release)
        self.timer.timeout.connect(self.release)
    def release(self):
        if not self.view.scene().clickEvents:
            print("release after drag")
            self.timer.stop()
        elif not self.timer.isActive():
            print("release after click")
    def OnMouseMove(self):
        if not self.timer.isActive() and self.view.scene().clickEvents:
            self.timer.start(10) # After a drag release, this is the "wait" time before self.release is called.
    def mouseReleaseEvent(self,ev): # This does only work outside the pyqtgraph widget. It overrides the method in QWidget and not in pyqtgraph.GraphicsScene()
        print("released ",ev)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    form = Window()
    form.show()
    sys.exit(app.exec_())

相关问题 更多 >