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利用matplotlib库绘制饼图的方法示例
Dec 18 Python
Python递归函数定义与用法示例
Jun 02 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
使用python的pandas为你的股票绘制趋势图
Jun 26 Python
python 列表推导式使用详解
Aug 29 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
python 贪心算法的实现
Sep 18 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 Python
Python基础教程,Python入门教程(超详细)
Jun 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
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
php实现登陆模块功能示例
2016/10/20 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
bootstrap table实例详解
2017/01/06 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
python海龟绘图实例教程
2014/07/24 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
用python找出那些被“标记”的照片
2017/04/20 Python
简单实现python聊天程序
2018/04/01 Python
一看就懂得Python的math模块
2018/10/21 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
python为什么会环境变量设置不成功
2020/06/23 Python
美国时尚女装在线:Missguided
2016/12/03 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
StringBuilder和String的区别
2015/05/18 面试题
单位同意报考证明
2015/06/17 职场文书
2016年情人节广告语
2016/01/28 职场文书
工作简历的自我评价
2019/05/16 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
webpack的移动端适配方案小结
2021/07/25 Javascript