当前位置: 首页 > news >正文

python之pyQt5实例:Matplotlib的应用

1、显示逻辑

1.1MatplotlibWidget.py

import sys
import random
import matplotlibmatplotlib.use("Qt5Agg")
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QSizePolicy, QWidget
from numpy import arange, sin, pi
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as pltclass MyMplCanvas(FigureCanvas):"""FigureCanvas的最终的父类其实是QWidget。"""def __init__(self, parent=None, width=5, height=4, dpi=100):# 配置中文显示plt.rcParams['font.family'] = ['SimHei']  # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号self.fig = Figure(figsize=(width, height), dpi=dpi)  # 新建一个figureself.axes = self.fig.add_subplot(111)  # 建立一个子图,如果要建立复合图,可以在这里修改plt.clf() # 每次绘图的时候不保留上一次绘图的结果FigureCanvas.__init__(self, self.fig)self.setParent(parent)'''定义FigureCanvas的尺寸策略,这部分的意思是设置FigureCanvas,使之尽可能的向外填充空间。'''FigureCanvas.setSizePolicy(self,QSizePolicy.Expanding,QSizePolicy.Expanding)FigureCanvas.updateGeometry(self)'''绘制静态图,可以在这里定义自己的绘图逻辑'''def start_static_plot(self):self.fig.suptitle('测试静态图')t = arange(0.0, 3.0, 0.01)s = sin(2 * pi * t)self.axes.plot(t, s)self.axes.set_ylabel('静态图:Y轴')self.axes.set_xlabel('静态图:X轴')self.axes.grid(True)'''启动绘制动态图'''def start_dynamic_plot(self, *args, **kwargs):timer = QtCore.QTimer(self)timer.timeout.connect(self.update_figure)  # 每隔一段时间就会触发一次update_figure函数。timer.start(1000)  # 触发的时间间隔为1秒。'''动态图的绘图逻辑可以在这里修改'''def update_figure(self):self.fig.suptitle('测试动态图')l = [random.randint(0, 10) for i in range(4)]self.axes.plot([0, 1, 2, 3], l, 'r')self.axes.set_ylabel('动态图:Y轴')self.axes.set_xlabel('动态图:X轴')self.axes.grid(True)self.draw()class MatplotlibWidget(QWidget):def __init__(self, parent=None):super(MatplotlibWidget, self).__init__(parent)self.initUi()def initUi(self):self.layout = QVBoxLayout(self)self.mpl = MyMplCanvas(self, width=5, height=4, dpi=100)# self.mpl.start_static_plot() # 如果你想要初始化的时候就呈现静态图,请把这行注释去掉#self.mpl.start_dynamic_plot() # 如果你想要初始化的时候就呈现动态图,请把这行注释去掉self.mpl_ntb = NavigationToolbar(self.mpl, self)  # 添加完整的 toolbarself.layout.addWidget(self.mpl)self.layout.addWidget(self.mpl_ntb)

1.2Ui_matplotlib_pyqt.py

from PyQt5 import QtCore, QtGui, QtWidgets
from MatplotlibWidget import MatplotlibWidget
class Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.matplotlibwidget_static = MatplotlibWidget(self.centralwidget)self.matplotlibwidget_static.setGeometry(QtCore.QRect(10, 0, 611, 271))self.matplotlibwidget_static.setObjectName("matplotlibwidget_static")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(670, 80, 75, 23))self.pushButton.setObjectName("pushButton")self.matplotlibwidget_dynamic = MatplotlibWidget(self.centralwidget)self.matplotlibwidget_dynamic.setEnabled(True)self.matplotlibwidget_dynamic.setGeometry(QtCore.QRect(10, 270, 611, 291))self.matplotlibwidget_dynamic.setObjectName("matplotlibwidget_dynamic")self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_2.setGeometry(QtCore.QRect(670, 370, 75, 23))self.pushButton_2.setObjectName("pushButton_2")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton.setText(_translate("MainWindow", "显示静态图"))self.pushButton_2.setText(_translate("MainWindow", "显示动态图"))

2、业务逻辑

import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QApplicationfrom Ui_matplotlib_pyqt import Ui_MainWindowclass MainWindow(QMainWindow, Ui_MainWindow):"""Class documentation goes here."""def __init__(self, parent=None):"""Constructor@param parent reference to the parent widget@type QWidget"""super(MainWindow, self).__init__(parent)self.setupUi(self)self.matplotlibwidget_dynamic.setVisible(False)self.matplotlibwidget_static.setVisible(False)@pyqtSlot()def on_pushButton_clicked(self):"""Slot documentation goes here."""self.matplotlibwidget_static.setVisible(True)self.matplotlibwidget_static.mpl.start_static_plot()@pyqtSlot()def on_pushButton_2_clicked(self):"""Slot documentation goes here."""self.matplotlibwidget_dynamic.setVisible(True)self.matplotlibwidget_dynamic.mpl.start_dynamic_plot()if __name__ == "__main__":app = QApplication(sys.argv)ui = MainWindow()ui.show()sys.exit(app.exec_())

http://www.lryc.cn/news/168763.html

相关文章:

  • 智囊AI-基于 ChatGPT 的 AI 工具产品 你的私人AI助手
  • nginx配置vue前端代理
  • 【C语言】【数据存储】用%u打印char类型?用char存128?
  • git-git命令汇总
  • 自定义实现简易版ArrayList
  • React中的Hooks--useReducer()
  • DM@数理逻辑@命题公式及其赋值@真值表@公式分类
  • HTTP协议(超级详细)
  • leetcode做题笔记135. 分发糖果
  • Oracle数据库体系结构(三)_逻辑结构
  • 在 Python 中计算两个 GPS 点之间的距离
  • 影刀RPA解决WPS不存在的问题
  • vue动态路由切换刷新保留历史路由搜索条件数据
  • 免费:CAD批量转PDF工具,附下载地址
  • 无涯教程-JavaScript - FACT函数
  • UART 协议
  • MySql中分割字符串
  • Ubuntu 22.04安装过程
  • 【算法|虚拟头节点|链表】移除链表元素
  • express静态路由匹配引发的404错误
  • VHOST-SCSI代码分析(4)VHOST KICK机制
  • Docker Volume(存储卷)
  • 【毕设选题】opencv 图像识别 指纹识别 - python
  • 阿里云无影云电脑使用初体验:真的好用吗?
  • 无涯教程-JavaScript - FLOOR.MATH函数
  • Dubbo3基础使用
  • Android 图片加载框架Glide源码详解
  • 知识竞赛活动舞台搭建需要多少钱
  • 07set注入级联属性和特殊字符及表达式语言
  • 用AI在小红书做早教启蒙,2个月涨粉11.7万,获赞10万的新流量玩法