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中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
Python实现建立SSH连接的方法
Jun 03 Python
Python heapq使用详解及实例代码
Jan 25 Python
Python标准库inspect的具体使用方法
Dec 06 Python
python文件拆分与重组实例
Dec 10 Python
解析Python3中的Import
Oct 13 Python
python logging添加filter教程
Dec 24 Python
python实现简单坦克大战
Mar 27 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
Django URL参数Template反向解析
Nov 24 Python
python中字符串的编码与解码详析
Dec 03 Python
Python使用MapReduce进行简单的销售统计
Apr 22 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 第三节 变量介绍
2012/04/28 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
python发布模块的步骤分享
2014/02/21 Python
Python getopt模块处理命令行选项实例
2014/05/13 Python
python获取list下标及其值的简单方法
2016/09/12 Python
pandas的qcut()方法详解
2019/07/06 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
优秀应届毕业生自荐信
2013/11/16 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
房屋出售协议书
2014/04/10 职场文书
综合内勤岗位职责
2014/04/14 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
个人查摆剖析材料
2014/10/04 职场文书
大学生在校表现评语
2014/12/31 职场文书
给老师的一封感谢信
2015/01/20 职场文书