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代码调试的几种方法总结
Apr 15 Python
判断网页编码的方法python版
Aug 12 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
python tkinter窗口最大化的实现
Jul 15 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
python3调用windows dos命令的例子
Aug 14 Python
python实现IOU计算案例
Apr 12 Python
Python用requests库爬取返回为空的解决办法
Feb 21 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和AJAX创建RSS聚合器的代码
2007/03/13 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
教你学会使用Python正则表达式
2017/09/07 Python
python实现飞机大战微信小游戏
2020/03/21 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
Python中itertools的用法详解
2020/02/07 Python
pytorch中的inference使用实例
2020/02/20 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
优秀员工评语
2014/02/10 职场文书
联谊会主持词
2014/03/26 职场文书
食堂标语大全
2014/06/11 职场文书
培养联系人考察意见
2015/06/01 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书