将 Pyqtgraph 嵌入到 PySide2

Posted

技术标签:

【中文标题】将 Pyqtgraph 嵌入到 PySide2【英文标题】:Embed Pyqtgraph to PySide2 【发布时间】:2019-03-03 07:43:17 【问题描述】:

我想在 PySide2 应用程序中实现一个 PyQtGraph PlotWidget。使用 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):

【问题讨论】:

【参考方案1】:

在 pyqtgraph 的 stable 分支中,甚至 PySide2 也不支持,因此它正在导入必须属于 PyQt4 或 PySide 的 QtGui.QGraphicsView,因为在 PyQt5 和 PySide2 中 QGraphicsView 属于子模块 QtWidgets 而不是 QtGui。

在开发分支中,PySide2 支持正在实现,所以如果你想使用 PySide2,你必须使用以下命令手动安装它(你必须先卸载你安装的 pyqtgraph):

git clone -b develop git@github.com: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_())

更多信息在:

https://github.com/pyqtgraph/pyqtgraph/issues/342

【讨论】:

非常感谢。这可行,但有一个损坏的 PySide2 安装问题。 谢谢!可能会感兴趣:我使用pyenv 来管理我的python 环境,而不是“手动”克隆/构建设置,而是使用pyqtraph's github page 上提出的解决方案,以便安装在我的环境中。我使用了以下命令pip install git+https://github.com/pyqtgraph/pyqtgraph 如果我使用 PyQtgraph 和 PySide2 5.6.0.1a 的开发版本,我的 Graph 无法使用上面给定的代码。 y 轴卡在 1.0003 之间的某个位置,最后一位数字变化非常快。有什么想法吗? @Sebus 我推荐使用最新版本的PySide2:5.12,这可能是一个老bug了。 @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)跨度> 【参考方案2】:

对于其他遇到 Point 错误的人 - 我从 'PySide2.QtCore import QPoint' 手动导入文件给我一个错误并将 Point 更改为 QPoint。没有任何官方消息,但现在修复它。

在此处查看修复https://github.com/pyqtgraph/pyqtgraph/pull/818/files

【讨论】:

以上是关于将 Pyqtgraph 嵌入到 PySide2的主要内容,如果未能解决你的问题,请参考以下文章

将 pyqtgraph 图嵌入到 QT .ui 中?

将 pyqtgraph 图嵌入到 QT .ui 中?

在 Qt 中嵌入 PyQtGraph 而不生成新窗口

使用 pyside2 将 pyqtgraph 图添加到 QTDesigner

如何将 3d GLViewWidget 插入包含 2d PyQtGraph 图的窗口中

用PyQtGraph绘制可视化数据图表