将 Pyqtgraph 嵌入到 PySide2
Embed Pyqtgraph to PySide2
我想在 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):
在 pyqtgraph 的稳定分支中甚至不支持 PySide2,因此它导入 QtGui.QGraphicsView 必须属于 PyQt4 或 PySide,因为在 PyQt5 和 PySide2 中 QGraphicsView 属于子模块 QtWidgets 而不是 QtGui。
在 develop 分支中,正在实现 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_())
更多信息见:
对于其他使用 Point 时出错的人 - 我手动从 'PySide2.QtCore import QPoint' 导入文件,给我一个错误并将 Point 更改为 QPoint。不是官方的,但暂时修复它。
在此处查看修复程序https://github.com/pyqtgraph/pyqtgraph/pull/818/files
我想在 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):
在 pyqtgraph 的稳定分支中甚至不支持 PySide2,因此它导入 QtGui.QGraphicsView 必须属于 PyQt4 或 PySide,因为在 PyQt5 和 PySide2 中 QGraphicsView 属于子模块 QtWidgets 而不是 QtGui。
在 develop 分支中,正在实现 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_())
更多信息见:
对于其他使用 Point 时出错的人 - 我手动从 'PySide2.QtCore import QPoint' 导入文件,给我一个错误并将 Point 更改为 QPoint。不是官方的,但暂时修复它。
在此处查看修复程序https://github.com/pyqtgraph/pyqtgraph/pull/818/files