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中使用PIL库实现图片高斯模糊实例
Feb 08 Python
python随机生成指定长度密码的方法
Apr 04 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
Python切片索引用法示例
May 15 Python
python检索特定内容的文本文件实例
Jun 05 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
Flask框架工厂函数用法实例分析
May 25 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
Python turtle库的画笔控制说明
Jun 28 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
pycharm2020.2 配置使用的方法详解
Sep 16 Python
如何在scrapy中捕获并处理各种异常
Sep 28 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 setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
jQuery实现查看图片功能
2020/12/01 jQuery
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
Python性能优化技巧
2015/03/09 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
污水厂厂长岗位职责
2014/01/04 职场文书
带病坚持工作事迹
2014/05/03 职场文书
住宅使用说明书
2014/05/09 职场文书
新闻报道策划方案
2014/06/11 职场文书
优秀教师个人总结
2015/02/11 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
行政撤诉申请书
2015/05/18 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js