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实现2014火车票查询代码分享
Jan 10 Python
9种python web 程序的部署方式小结
Jun 30 Python
python计算圆周率pi的方法
Jul 11 Python
python更改已存在excel文件的方法
May 03 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
Python中字典与恒等运算符的用法分析
Aug 22 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
利用Python脚本实现自动刷网课
Feb 03 Python
python编程进阶之异常处理用法实例分析
Feb 21 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 安全检测代码片段(分享)
2013/07/05 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
javascript下过滤数组重复值的代码
2007/09/10 Javascript
快速排序 php与javascript的不同之处
2011/02/22 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
vue实现全选和反选功能
2017/08/31 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
python自动zip压缩目录的方法
2015/06/28 Python
Python中文编码知识点
2019/02/18 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python加载自定义词典实例
2019/12/06 Python
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
大专计算机个人求职的自我评价
2013/10/21 职场文书
校园报刊亭的创业计划书
2014/01/02 职场文书
中学教师请假制度
2014/02/03 职场文书
新学期教师寄语
2014/04/02 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
MongoDB支持的数据类型
2022/04/11 MongoDB