PyQt5结合matplotlib绘图的实现示例

作者:落叶_小唱 时间:2023-12-02 20:05:30 

参考网上的例子,实现了简单的matplotlib pyqt5绘图 

相关知识点:
 (1)pyqt5中添加控件要在布局中添加
 (2)布局可以使用replaceWidget替换控件
 (3)信号与槽机制


timer = QtCore.QTimer(self)
timer.timeout.connect(self.update_figure)

self.btnPlot.clicked.connect(self.plotButton_callback)

实现的效果

PyQt5结合matplotlib绘图的实现示例


import sys
from PyQt5 import QtCore, QtGui, uic
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMessageBox, QVBoxLayout, QSizePolicy, QWidget

from PyQt5.QtGui import QIcon
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np

qtCreatorFile = "matplotlib_ui.ui"
# 使用uic加载
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

class MyMplCanvas(FigureCanvas):
 """这是一个窗口部件,即QWidget(当然也是FigureCanvasAgg)"""
 def __init__(self, parent=None, width=5, height=4, dpi=100):
   fig = Figure(figsize=(width, height), dpi=dpi)
   self.axes = fig.add_subplot(111)
   # 每次plot()调用的时候,我们希望原来的坐标轴被清除(所以False)
   self.axes.hold(False)
   self.axes.grid('on')

self.compute_initial_figure()

#
   FigureCanvas.__init__(self, fig)
   self.setParent(parent)

FigureCanvas.setSizePolicy(self,
                 QSizePolicy.Expanding,
                 QSizePolicy.Expanding)
   FigureCanvas.updateGeometry(self)

def compute_initial_figure(self):
   pass

class MyStaticMplCanvas(MyMplCanvas):
 """静态画布:一条正弦线"""
 def compute_initial_figure(self):
   t = np.arange(0.0, 3.0, 0.01)
   s = np.sin(2 * np.pi * t)
   self.axes.grid('on')
   self.axes.plot(t, s)

class MyDynamicMplCanvas(MyMplCanvas):
 """动态画布:每秒自动更新,更换一条折线。"""
 def __init__(self, *args, **kwargs):
   MyMplCanvas.__init__(self, *args, **kwargs)
   timer = QtCore.QTimer(self)
   timer.timeout.connect(self.update_figure)
   timer.start(1000)

def compute_initial_figure(self):
   self.axes.grid('on')
   self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')

def update_figure(self):
   # 构建4个随机整数,位于闭区间[0, 10]
   l = [np.random.randint(0, 10) for i in range(4)]
   self.axes.grid('on')
   self.axes.plot([0, 1, 2, 3], l, 'r')
   self.draw()

class MyApp(QMainWindow, Ui_MainWindow):

def __init__(self):
   QMainWindow.__init__(self)
   Ui_MainWindow.__init__(self)
   super().__init__()

self.initUI()
   self.initBtn()
   self.initFrame()

def initFrame(self):
   self.main_widget = self.frame
   self.layout = QVBoxLayout(self.main_widget)
   self.f = MyMplCanvas(self.main_widget)
   self.layout.addWidget(self.f)

def initUI(self):        

self.setupUi(self)
   self.setWindowTitle("PyQt5结合Matplotlib绘图")
   self.setWindowIcon(QIcon("rocket.ico"))  # 设置图标,linux下只有任务栏会显示图标

self.show()

def initBtn(self):
   self.btnPlot.clicked.connect(self.plotButton_callback)
   self.btnPlot.setToolTip("Button")    

def plotButton_callback(self):

self.drawFrame()

def drawFrame(self):

sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
   dc = MyDynamicMplCanvas(self.f, width=5, height=4, dpi=100)
   self.layout.addWidget(sc)
   self.layout.replaceWidget(self.f,dc) # 替换控件

if __name__ == '__main__':

app = QApplication(sys.argv)
 ex = MyApp()
 sys.exit(app.exec_())

参考链接:https://www.cnblogs.com/hhh5460/p/4322652.html

来源:https://blog.csdn.net/ouening/article/details/79595266

标签:PyQt5,matplotlib
0
投稿

猜你喜欢

  • 在主机商的共享服务器上部署Django站点的方法

    2021-03-20 22:41:34
  • python3.6.4安装opencv3.4.2的实现

    2021-08-07 22:48:56
  • Vue中导入excel文件的两种方式及使用步骤

    2024-05-21 10:16:20
  • 浅谈Python中的可变对象和不可变对象

    2021-07-17 16:58:49
  • 使用Python第三方库pygame写个贪吃蛇小游戏

    2021-05-19 11:08:37
  • SQL Server 2008的一些新特点及独到之处

    2009-01-15 12:59:00
  • 简单触发器的使用 献给SQL初学者

    2011-09-30 11:27:49
  • python获取文件后缀名及批量更新目录下文件后缀名的方法

    2021-02-19 20:51:14
  • mysql的存储过程、游标 、事务实例详解

    2024-01-12 22:02:15
  • IE9报“DOM Exception: INVALID_CHARACTER_ERR (5)”错误的原因及解决办法

    2011-09-01 19:11:07
  • MySql5.5忘记root密码怎么办

    2024-01-23 01:02:45
  • python绘制多个子图的实例

    2023-01-31 02:24:24
  • mysql出现10061错误解决办法

    2010-07-04 13:36:00
  • 使用python-pptx包批量修改ppt格式的实现

    2021-04-03 21:31:16
  • Python实现将蓝底照片转化为白底照片功能完整实例

    2021-06-08 21:40:55
  • Hadoop 文件系统命令行基础详解

    2023-08-31 13:57:03
  • asp如何更好地保护我的网页?

    2009-11-22 19:29:00
  • Python中使用subprocess库创建附加进程

    2022-01-01 06:30:25
  • XML十项特点

    2008-04-05 13:49:00
  • SQL实现Excel的10个常用功能的示例详解

    2024-01-17 18:11:36
  • asp之家 网络编程 m.aspxhome.com