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 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
Python中unittest用法实例
Sep 25 Python
python 获取网页编码方式实现代码
Mar 11 Python
django使用LDAP验证的方法示例
Dec 10 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
Python通用函数实现数组计算的方法
Jun 13 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
pycharm 的Structure界面设置操作
Feb 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
js微信支付实现代码
2016/12/22 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
js读取本地文件的实例
2017/12/22 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
python的concat等多种用法详解
2018/11/28 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
英文自荐信
2013/12/19 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
检讨书范文500字
2015/01/28 职场文书
详解Redis主从复制实践
2021/05/19 Redis
Python Django获取URL中的数据详解
2021/11/01 Python