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实现的一个找零钱的小程序代码分享
Aug 25 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
详解django三种文件下载方式
Apr 06 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
Python如何导出导入所有依赖包详解
Jun 08 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
DISCUZ 分页代码
2007/01/02 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
JS 建立对象的方法
2007/04/21 Javascript
JQuery跨Iframe选择实现代码
2010/08/19 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
Python多线程获取返回值代码实例
2020/02/17 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
趣味运动会活动方案
2014/02/12 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
小学生安全教育主题班会
2015/08/12 职场文书