pyqt5与matplotlib结合画图,绘制动态图,使图一直刷新。
常规的绘图加一个定时器就能完成。
如给一个数组x=[3,4,5],每隔一秒,数组就会添加一个数,同时每隔一秒就会画一次x的图,实现动态展示。
要实现定时效果,得有两个按钮控制时间开,停。按钮命名为
self.startBtn = QPushButton(‘开始’)
self.endBtn = QPushButton(‘结束’)

import numpy as np
import sys
import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from pylab import *

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 使用 matplotlib中的FigureCanvas (在使用 Qt5 Backends中 FigureCanvas继承自QtWidgets.QWidget)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QTimer
import sys

from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt


class App(QWidget):
    def __init__(self, parent=None):
        # 父类初始化方法
        super(App, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.setWindowTitle('动态演示')
        self.setWindowIcon(QIcon('电力图标.jpg'))
        self.setWindowIcon(QIcon('2345_image_file_copy_1.jpg'))
        self.setFixedSize(1200, 700)
        self.setMinimumSize(1200, 700)
        self.setMaximumSize(1200, 700)
        # 几个QWidgets
  
        self.startBtn = QPushButton('开始')
        self.endBtn = QPushButton('结束')
        self.startBtn.clicked.connect(self.startTimer)
        self.endBtn.clicked.connect(self.endTimer)
        # 时间模块
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.showTime)
        #图像模块
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        #垂直布局

        layout=QVBoxLayout()
        layout.addWidget(self.startBtn)
        layout.addWidget(self.endBtn)
        layout.addWidget( self.canvas )
        self.setLayout(layout)



        # 数组初始化
        self.x=[]

    def showTime(self):
        shuju=np.random.random_sample()*10#返回一个[0,1)之间的浮点型随机数*10
        self.x.append(shuju)#数组更新
        ax = self.figure.add_axes([0.1, 0.1, 0.8, 0.8])
        ax.clear()
        ax.plot(self.x)
        self.canvas.draw()
    # 启动函数
    def startTimer(self):
        # 设置计时间隔并启动
        self.timer.start(1000)#每隔一秒执行一次绘图函数 showTime
        self.startBtn.setEnabled(False)#开始按钮变为禁用
        self.endBtn.setEnabled(True)#结束按钮变为可用
    def endTimer(self):
        self.timer.stop()#计时停止
        self.startBtn.setEnabled(True)#开始按钮变为可用
        self.endBtn.setEnabled(False)#结束按钮变为可用
        self.x=[]#清空数组
        


# 运行程序
if __name__ == '__main__':
    # QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    app = QApplication(sys.argv)
    main_window = App()
    main_window.show()
    app.exec()


#清除图像代码(只存在一个图像情况下)

 def clearshowTime(self):
        plt.clf()
        self.canvas.draw()

#如果存在多图,清除图像必须指定图像名 代码

 def clearshowTime(self):
        self.figure2_1.clf() #图像名.clf()
        self.canvas.draw()

画图代码

#ax = self.fig.subplot(1,1,1)
            x = np.linspace(0, 100, 100)
            y = np.random.random(100)
            self.ax.cla()  # TODO:删除原图,让画布上只有新的一次的图
            self.ax.plot(x, y)
            self.canvas.draw()  # TODO:这里开始绘制

运行界面
在这里插入图片描述
点击开始后,系统能不断绘图。
在这里插入图片描述

Logo

鸿蒙生态一站式服务平台。

更多推荐