Вставить Pyqtgraph в PySide2

Я хотел бы реализовать PyQtGraph PlotWidget в приложении PySide2. С PyQt5 все работает. С PySide2 я получаю сообщение об ошибке внизу. Я уже узнал, что есть некоторые работы, но также кажется, что нескольким людям удалось заставить это работать. Однако я пока не умел. Я использую Pyqtgraph 0.10, а не ветку разработчика. Мне измениться? Что мне нужно сделать?

from PySide2.QtWidgets import QApplication, QMainWindow, QGraphicsView, QVBoxLayout, QWidget
import sys
import pyqtgraph as pg


class WdgPlot(QWidget):
    def __init__(self, parent=None):
        super(WdgPlot, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        self.pw = pg.PlotWidget(self)
        self.pw.plot([1,2,3,4])
        self.pw.show()
        self.layout.addWidget(self.pw)
        self.setLayout(self.layout)
if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = WdgPlot()
    w.show()
    sys.exit(app.exec_())

Ошибка:

 QtGui.QGraphicsView.__init__(self, parent)
TypeError: arguments did not match any overloaded call:
  QGraphicsView(parent: QWidget = None): argument 1 has unexpected type 'WdgPlot'
  QGraphicsView(QGraphicsScene, parent: QWidget = None): argument 1 has unexpected type 'WdgPlot'
Traceback (most recent call last):

person Sebus    schedule 27.09.2018    source источник


Ответы (2)


В стабильной ветке pyqtgraph даже PySide2 не поддерживается, поэтому он импортирует QtGui.QGraphicsView, который должен принадлежать PyQt4 или PySide, поскольку в PyQt5 и PySide2 QGraphicsView принадлежит подмодулю QtWidgets, а не QtGui.

В ветке разработки реализуется поддержка PySide2, поэтому, если вы хотите использовать PySide2, вам придется установить его вручную, используя следующие команды (вы должны сначала удалить установленный pyqtgraph):

git clone -b develop [email protected]:pyqtgraph/pyqtgraph.git
sudo python setup.py install

Тогда вы можете использовать:

from PySide2 import QtWidgets
import pyqtgraph as pg


class WdgPlot(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(WdgPlot, self).__init__(parent)
        layout = QtWidgets.QVBoxLayout(self)

        pw = pg.PlotWidget()
        pw.plot([1,2,3,4])
        layout.addWidget(pw)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = WdgPlot()
    w.show()
    sys.exit(app.exec_())

введите описание изображения здесь

Больше информации:

person eyllanesc    schedule 27.09.2018
comment
Большое Вам спасибо. Это работает, но есть дополнительная проблема с неработающей установкой PySide2. - person Sebus; 28.09.2018
comment
Спасибо! Это может быть интересно: я использую pyenv для управления своими средами python, и вместо клонирования / создания настройки вручную я использовал решение, предложенное на страница github pyqtraph, чтобы установка была локальной для моего env. Я использовал следующую команду pip install git+https://github.com/pyqtgraph/pyqtgraph - person Christian; 19.11.2018
comment
Если я использую разрабатываемую версию PyQtgraph и PySide2 5.6.0.1a, мой Graph не работает с приведенным выше кодом. Ось y застряла где-то между 1.0003, и последние цифры меняются очень быстро. Любые идеи? - person Sebus; 22.01.2019
comment
@Sebus Я рекомендую использовать последнюю версию PySide2: 5.12, вероятно, это старая ошибка. - person eyllanesc; 22.01.2019
comment
@eyllanesc: Спасибо! Он работает лучше, однако затем я получаю следующее сообщение об ошибке с событием mousemove. График работает: Traceback (последний вызов последним): файл C: \ Python35 \ lib \ site-packages \ pyqtgraph \ widgets \ GraphicsView.py, строка 365, в mouseMoveEvent delta = Point (ev.pos () - self. lastMousePos) TypeError: 'PySide2.QtCore.QPoint .__ sub__' вызван с неправильными типами аргументов: PySide2.QtCore.QPoint .__ sub __ (Point) Поддерживаемые подписи: PySide2.QtCore.QPoint .__ sub __ (PySide2.QtCore.QPoint) - person Sebus; 23.01.2019
comment
Так ли это и в 2020 году? - person Jim; 07.02.2020
comment
@Jim Объяснись лучше, я не понимаю твоего вопроса - person eyllanesc; 07.02.2020
comment
Этот вопрос был задан в 2018 году, принятый ответ заключался в том, как обойти незавершенную функцию. Сейчас 2020 год. Я ожидал, что эта функция уже будет доступна, но я столкнулся с той же проблемой. Кажется, что сегодня, в 2020 году, ответ состоит в том, чтобы напрямую использовать PySide2.QtChart вместо pyqtgraph. - person Jim; 08.02.2020
comment
@Jim Новая версия pyqtgraph все еще находится в стадии разработки (она находится в стадии бета-тестирования), поэтому мой ответ все еще действителен. Использование QtCharts - еще один вариант, который не имеет ничего общего с вопросом OP. IMHO Qt Charts не получил особого внимания от Qt (у него много ограничений), также должны быть включены ошибки PySide2 с этим модулем, поэтому, если они предоставят мне мой выбор, я все равно буду использовать pyqtgraph (очевидно, ветвь разработки + необходим некоторый патч) - person eyllanesc; 08.02.2020

Для всех, у кого возникают ошибки с Point - я вручную импортировал из «PySide2.QtCore import QPoint» в файлы, выдающие ошибку, и изменил Point на QPoint. Ничего официального, но пока это исправляет.

Посмотреть исправление можно здесь https://github.com/pyqtgraph/pyqtgraph/pull/818/files

person Nevin Deshpande    schedule 03.04.2019