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操作文件
Jul 31 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
深入理解Python中的super()方法
Nov 20 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
Django 框架模型操作入门教程
Nov 05 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
python使用PIL剪切和拼接图片
Mar 23 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
python opencv通过4坐标剪裁图片
Jun 05 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 MYSQL 数据备份类
2009/06/19 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
跟老齐学Python之有点简约的元组
2014/09/24 Python
mac下如何将python2.7改为python3
2018/07/13 Python
python实现决策树分类(2)
2018/08/30 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
详解Python3注释知识点
2019/02/19 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
应届毕业生个人求职信范文
2014/01/29 职场文书
募捐倡议书
2014/04/14 职场文书
勤俭节约倡议书
2014/04/14 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
放飞理想主题班会
2015/08/14 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android