PyQt5结合matplotlib绘图的实现示例


Posted in Python onSeptember 15, 2020

参考网上的例子,实现了简单的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

到此这篇关于PyQt5结合matplotlib绘图的实现示例的文章就介绍到这了,更多相关PyQt5结合matplotlib内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
收集的几个Python小技巧分享
Nov 22 Python
python win32 简单操作方法
May 25 Python
python机器学习之决策树分类详解
Dec 20 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
python小项目之五子棋游戏
Dec 26 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
python属于解释型语言么
Jun 15 Python
pycharm激活方法到2099年(激活流程)
Sep 22 #Python
pycharm专业版远程登录服务器的详细教程
Sep 15 #Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 #Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 #Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 #Python
Pycharm Git 设置方法
Sep 15 #Python
2020版Python学习路线图(附学习资料)
Sep 15 #Python
You might like
PHP的中问验证码
2006/11/25 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
vue中的scope使用详解
2017/10/29 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
js实现批量删除功能
2020/08/27 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
django_orm查询性能优化方法
2018/08/20 Python
python使用folium库绘制地图点击框
2018/09/21 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
Django组件content-type使用方法详解
2019/07/19 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
物业管理工作方案
2014/05/10 职场文书
综合素质自我评价评语
2015/03/06 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python