如何使用 PySide2 在 matplotlib 中显示图形?
Posted
技术标签:
【中文标题】如何使用 PySide2 在 matplotlib 中显示图形?【英文标题】:How do you display a figure in matplotlib using PySide2? 【发布时间】:2019-07-28 06:55:04 【问题描述】:我正在尝试学习 matplotlib,并尝试测试以下代码。
import matplotlib
from matplotlib.figure import Figure
import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
import sys
from PySide2 import QtGui
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
wid = QtGui.QWidget()
wid.resize(250, 150)
grid = QtGui.QGridLayout()
wid.setLayout(grid)
fig = Figure(figsize=(7,5), dpi=65, facecolor=(1,1,1), edgecolor=(0,0,0))
canvas = FigureCanvas(fig)
grid.addWidget(canvas)
wid.show()
但它似乎无法识别Figure的签名。
TypeError: 'PySide2.QtGui.QGridLayout.addWidget' 调用错误 参数类型: PySide2.QtGui.QGridLayout.addWidget(FigureCanvasQTAgg) 支持 签名: PySide2.QtGui.QGridLayout.addWidget(PySide2.QtGui.QWidget,int,int, PySide2.QtCore.Qt.Alignment = 0) PySide2.QtGui.QGridLayout.addWidget(PySide2.QtGui.QWidget,int,int, int, int, PySide2.QtCore.Qt.Alignment = 0)
【问题讨论】:
【参考方案1】:PySide2 是 Qt5 的绑定,因此您必须使用backend_qt5agg
而不是backend_qt4agg
,另一方面,建议在 matplotlib 之前导入后端(本例中为 PySide2),以便 matplotlib 在内部配置它,此外对于 QApplication,QWidget 和 QGridLayout 属于 QtWidgets,因为 Qt5 将它们与 QtGui 分开,最后当您向 QGridLayout 添加一个小部件时,您必须在以下参数中指明它的位置。
考虑到上面的解决方案是
import sys
from PySide2 import QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
wid = QtWidgets.QWidget()
wid.resize(250, 150)
grid = QtWidgets.QGridLayout(wid)
fig = Figure(figsize=(7, 5), dpi=65, facecolor=(1, 1, 1), edgecolor=(0, 0, 0))
canvas = FigureCanvas(fig)
grid.addWidget(canvas, 0, 0)
wid.show()
sys.exit(app.exec_())
【讨论】:
此方法不适用于 PySide2 5.13,也请参阅:***.com/questions/56182256/…以上是关于如何使用 PySide2 在 matplotlib 中显示图形?的主要内容,如果未能解决你的问题,请参考以下文章
在 Pyside2 中嵌入 Matplotlib 的释放错误
带有 Pyside2 和 Matplotlib 的 Pyinstaller 无法正常工作
在使用 matplotlib 和 PySide2 运行的应用程序中使用 pdb 调试器时出现“事件循环已在运行”
由于 PySide2 和 Matplotlib,Travis-CI 无法构建