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_())

结束代码

posted @ 2022-04-23 10:17  Harold100zhan  阅读(873)  评论(0编辑  收藏  举报