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 切片和range()用法说明
Mar 24 Python
使用python获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
Python中的集合类型知识讲解
Aug 19 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
Python银行系统实战源码
Oct 25 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
python reduce 函数使用详解
2017/12/05 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
使用django实现一个代码发布系统
2019/07/18 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
python中os.remove()用法及注意事项
2021/01/31 Python
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
建筑工程自我鉴定
2013/10/18 职场文书
党员违纪检讨书
2014/02/18 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
灵能百分百第三季什么时候来?
2022/03/15 日漫
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技