我的代码如下。当我双击时,出现上述错误。在这种情况下我该怎么办?
我发现了一些线索
我猜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
问题是,重写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