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 MySQLdb Windows下安装教程及问题解决方法
May 09 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
python实现自动登录
Sep 17 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
如何在向量化NumPy数组上进行移动窗口
May 18 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
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
vue实现搜索功能
2019/05/28 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
python中可以声明变量类型吗
2020/06/18 Python
浅谈python 类方法/静态方法
2020/09/18 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
Python实现自动整理文件的脚本
2020/12/17 Python
python实现无边框进度条的实例代码
2020/12/30 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
保送生自荐信范文
2013/10/06 职场文书
大学生毕业求职简历的自我评价
2013/10/24 职场文书
应用艺术毕业生的自我评价
2013/12/04 职场文书
2015年学校安全工作总结
2015/04/22 职场文书