PyQt与Matplotlib画图结合
发布日期:2021-05-07 14:29:41 浏览次数:20 分类:原创文章

本文共 2144 字,大约阅读时间需要 7 分钟。

实现matplotlib图形通过PyQt5+Qt5在GUI中呈现步骤:

第一步,通过matplotlib.backends.backend_qt5agg类来连接PyQt5:

import matplotlibmatplotlib.use("Qt5Agg")  # 声明使用QT5from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvasfrom matplotlib.figure import Figurefrom PyQt5 import QtWidgets,QtCorefrom PyQt5.QtWidgets import QMainWindow,QApplicationimport sys

第二步,具体图形代码实现部分,例:

class Figure_Canvas(FigureCanvas):   # 通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplotlib的关键    def __init__(self, parent=None, width=11, height=5, dpi=100):        fig = Figure(figsize=(width, height), dpi=100)  # 创建一个Figure,注意:该Figure为matplotlib下的figure,不是matplotlib.pyplot下面的figure        FigureCanvas.__init__(self, fig) # 初始化父类        self.setParent(parent)        self.axes = fig.add_subplot(111) # 调用figure下面的add_subplot方法,类似于matplotlib.pyplot下面的subplot方法    def test(self):        x = [1,2,3,4,5,6,7,8,9]        y = [23,21,32,13,3,132,13,3,1]        self.axes.plot(x, y)

第三步,GUI上通过控件呈现matplotlib画出来的图形——通过QtWidgets.QGraphicsView控件来实现

class Mytest(QMainWindow):    def __init__(self, *args, **kwargs):        super().__init__(*args, **kwargs)        # 设置窗口标题        self.setWindowTitle('My First App')        self.setFixedSize(800, 600)               # ===通过graphicview来显示图形        self.graphicview = QtWidgets.QGraphicsView()  # 第一步,创建一个QGraphicsView        self.graphicview.setObjectName("graphicview")        dr = Figure_Canvas()        #实例化一个FigureCanvas        dr.test()  # 画图        graphicscene = QtWidgets.QGraphicsScene()  # 第三步,创建一个QGraphicsScene,因为加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中        graphicscene.addWidget(dr)  # 第四步,把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到QGraphicsScene中的        self.graphicview.setScene(graphicscene)  # 第五步,把QGraphicsScene放入QGraphicsView        self.graphicview.show()  # 最后,调用show方法呈现图形!Voila!!        self.setCentralWidget(self.graphicview)        self.graphicview.setFixedSize(800,600)if __name__ == '__main__':    app = QApplication(sys.argv)    mytest=Mytest()    mytest.show()    app.exec_()

img

搞懂这篇文章里的每一句话,水平就足够通过PyQt5制作GUI实现绘图功能。

上一篇:Matplotlib.use('Qt5Agg')||后端(backend)是什么意思?
下一篇:PyQt5.QtWidget.QGraphicsScene结构及用法

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月04日 01时25分42秒