PyQT5显示MatPlotib图片
作者:互联网
参考链接:
Matplotlib植入PyQt5 + QT5的UI呈现_lyy的博客-CSDN博客
https://www.cnblogs.com/laoniubile/p/5904817.html
首先定义Figure_Canvas类,后续调用,test用于绘图,width总像素=width*dpi
1 class Figure_Canvas(FigureCanvas): # 通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplot lib的关键 2 3 def __init__(self, parent=None, width=7, height=3, dpi=100): 4 fig = Figure(figsize=(width, height), dpi=100) # 创建一个Figure,注意:该Figure为matplotlib下的figure,不是matplotlib.pyplot下面的figure 5 6 FigureCanvas.__init__(self, fig) # 初始化父类 7 self.setParent(parent) 8 9 self.axes = fig.add_subplot(111) # 调用figure下面的add_subplot方法,类似于matplotlib.pyplot下面的subplot方法 10 11 def test(self): 12 x = [1,2,3,4,5,6,7,8,9] 13 y = [23,21,32,13,3,132,13,3,1] 14 self.axes.plot(x, y) 15
在使用时,使用graphicview来显示图形,在第一步时,QtWidgets.QGraphicsView(self.mplWidOld) 选择已经用UI布局好的QWidget,该布局的名称为mplWidOld
Harold:本代码放置在‘编写业务逻辑代码’处。
1 # ===通过graphicview来显示图形 2 self.graphicview = QtWidgets.QGraphicsView(self.mplWidOld) # 第一步,创建一个QGraphicsView 3 self.graphicview.setObjectName("graphicview") 4 drOld = Figure_Canvas() 5 # 实例化一个FigureCanvas 6 drOld.test() # 画图 7 graphicscene = QtWidgets.QGraphicsScene() # 第三步,创建一个QGraphicsScene,因为加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中 8 graphicscene.addWidget(drOld) # 第四步,把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到QGraphicsScene中的 9 self.graphicview.setScene(graphicscene) # 第五步,把QGraphicsScene放入QGraphicsView 10 self.graphicview.show() # 最后,调用show方法呈现图形!Voila!!
Harold:总文件如下
ui文件:HaroldDataProc.ui
使用vscode的PYQT Integration插件生成的py文件:Ui_HaroldDataProc.py
1 import matplotlib 2 matplotlib.use("Qt5Agg") # 声明使用QT5 3 from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 4 from matplotlib.figure import Figure 5 from PyQt5 import QtWidgets,QtGui,QtCore 6 from Ui_HaroldDataProc import Ui_MainWindow 7 from PyQt5.QtCore import QFile,QFileInfo,QIODevice,QTextStream 8 import sys 9 from txtDataProc_To_Txt import oneDataProc,genData 10 11 class Figure_Canvas(FigureCanvas): # 通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplot lib的关键 12 13 def __init__(self, parent=None, width=7, height=3, dpi=100): 14 fig = Figure(figsize=(width, height), dpi=100) # 创建一个Figure,注意:该Figure为matplotlib下的figure,不是matplotlib.pyplot下面的figure 15 16 FigureCanvas.__init__(self, fig) # 初始化父类 17 self.setParent(parent) 18 19 self.axes = fig.add_subplot(111) # 调用figure下面的add_subplot方法,类似于matplotlib.pyplot下面的subplot方法 20 21 def test(self): 22 x = [1,2,3,4,5,6,7,8,9] 23 y = [23,21,32,13,3,132,13,3,1] 24 self.axes.plot(x, y) 25 26 class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): 27 def __init__(self, parent= None): 28 super(MainWindow, self).__init__(parent) 29 self.setupUi(self) 30 import random 31 import numpy as np 32 33 # ===通过graphicview来显示图形 34 self.graphicview = QtWidgets.QGraphicsView(self.mplWidOld) # 第一步,创建一个QGraphicsView 35 self.graphicview.setObjectName("graphicview") 36 drOld = Figure_Canvas() 37 # 实例化一个FigureCanvas 38 drOld.test() # 画图 39 graphicscene = QtWidgets.QGraphicsScene() # 第三步,创建一个QGraphicsScene,因为加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中 40 graphicscene.addWidget(drOld) # 第四步,把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到QGraphicsScene中的 41 self.graphicview.setScene(graphicscene) # 第五步,把QGraphicsScene放入QGraphicsView 42 self.graphicview.show() # 最后,调用show方法呈现图形!Voila!! 43 44 45 # 此处编写业务逻辑代码 46 if __name__ == "__main__": 47 import sys 48 app = QtWidgets.QApplication(sys.argv) 49 mainWindow = MainWindow() 50 mainWindow.show() 51 sys.exit(app.exec_())
结束代码
标签:__,Figure,FigureCanvas,self,graphicview,PyQT5,matplotlib,MatPlotib,图片 来源: https://www.cnblogs.com/harold100zhan/p/16181601.html