self.sendClickEvent(cev [0]):mouseReleaseEvent

问题描述 投票:0回答:1

我的代码如下。当我双击时,出现上述错误。在这种情况下我该怎么办?

我发现了一些线索

  1. http://www.pyqtgraph.org/documentation/_modules/pyqtgraph/GraphicsScene/mouseEvents.html#MouseClickEvent.double
  2. http://python.6.x6.nabble.com/problem-with-mouseDoubleClickEvent-on-QTreeView-1-td1921227.html

我猜pg.Plotwidget没有'mouseDoubleClickEvent',所以问题可能是继承类...

from PyQt5 import QtGui
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

import pyqtgraph as pg

class MyPlot(pg.PlotWidget):
    def mouseDoubleClickEvent(self, ev):
        print(1)

class main(QWidget):
    def __init__(self):
        super().__init__()
        pw = MyPlot() 
        pw.showGrid(x=True, y=True)
        pw.setXRange(0, 10)
        x = range(0, 10)
        y = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
        layout = QHBoxLayout()
        pw.plot(x, y, pen='b', symbol='x', symbolPen='g', symbolBrush=0.2, name='green')
        layout.addWidget(pw)
        self.setLayout(layout)
        self.show()

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setAttribute(Qt.AA_Use96Dpi)
    main = main()
    main.show()

    sys.exit(app.exec_())
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pyqtgraph\GraphicsScene\GraphicsScene.py", line 199, in mouseReleaseEvent
    if self.sendClickEvent(cev[0]):
IndexError: list index out of range
python pyqt pyqtgraph
1个回答
0
投票

问题是,重写mouseDoubleClickEvent方法并且未通过super调用父方法导致事件传输到使用它的其他方法为None的其他方法,例如mouseReleaseEvent导致错误。解决方案是使用super调用父方法。

class MyPlot(pg.PlotWidget):
    def mouseDoubleClickEvent(self, ev):
        print(1)
        super().mouseDoubleClickEvent(ev)

可以认为pyqtgraph无法预见这种错误,而且pyqtgraph开发人员似乎已经知道了这一点,因为他们已经在pyqtgraph的development分支中解决了这个问题,因此另一种解决方案是使用该代码,为此您可以使用以下过程安装它:

git clone -b develop [email protected]:pyqtgraph/pyqtgraph.git
sudo python setup.py install
© www.soinside.com 2019 - 2024. All rights reserved.