self.sendClickEvent (cev [0]): ошибка, когда mouseReleaseEvent - PullRequest
1 голос
/ 05 марта 2020

Мой код похож на ниже. Когда я дважды щелкаю, я получаю ошибку, как указано выше. Что мне делать в этом случае?

Я нашел несколько подсказок

  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

1 Ответ

0 голосов
/ 06 марта 2020

Проблема в том, что переопределение метода mouseDoubleClickEvent и отсутствие вызова родительского метода через super приводит к тому, что событие, передаваемое другим методам, которые его используют, равно None, например mouseReleaseEvent, что вызывает ошибку. Решение состоит в том, чтобы вызвать родительский метод, используя super.

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

Можно считать ошибкой, что pyqtgraph не предвидит этот случай, и кажется, что разработчики pyqtgraph уже знают об этом, так как они решили его в ветвь разработки pyqtgraph, поэтому другое решение - использовать этот код, и для этого вы можете установить его, используя следующую процедуру:

git clone -b develop git@github.com:pyqtgraph/pyqtgraph.git
sudo python setup.py install
...