wxPython使用matplotlib绘制动态曲线

news2024/11/15 13:46:40

1.思路

我们创建了一个继承自wx.Frame的自定义窗口类MyFrame。在MyFrame的构造函数中,我们创建了一个matplotlibFigure对象和一个FigureCanvas对象,用于在窗口中显示绘图结果。然后,我们使用numpy生成了一个包含100个点的x轴坐标数组self.x和对应的正弦值数组。接下来,我们使用self.ax.plot方法绘制了一条初始的正弦曲线,并保存了对这条曲线对象的引用self.line。我们还创建了一个定时器self.timer,并将其绑定到self.on_timer方法上。self.on_timer方法会在定时器触发时被调用,其中我们更新了x轴坐标数组和正弦曲线对象的数据,并重新绘制曲线。

2.运行效果

 3.完整代码

import wx
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas

class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, '动态正弦曲线', size=(600, 400))
        self.panel = wx.Panel(self)
        
        self.fig, self.ax = plt.subplots()
        self.canvas = FigureCanvas(self.panel, -1, self.fig)
        
        self.x = np.linspace(0, 2*np.pi, 100)
        self.line, = self.ax.plot(self.x, np.sin(self.x))
        
        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
        
        self.layout()

    def layout(self):
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.canvas, 1, wx.EXPAND)
        self.panel.SetSizer(sizer)
        self.panel.Layout()

    def on_timer(self, event):
        self.x += 0.1
        self.line.set_xdata(self.x)
        self.ax.set_xlim(self.x.min(), self.x.max())
        self.canvas.draw()
        
    def start(self):
        self.timer.Start(100)

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame(parent=None, id=-1)
    frame.Show()
    frame.start()
    app.MainLoop()

4.知识点说明

在wxPython中,使用Sizer来管理窗口中的控件布局。调用panel的SetSizer方法可以将Sizer对象应用到panel上,从而实现控件的布局。

在代码中,调用self.panel.SetSizer(sizer)将sizer对象应用到self.panel上,然后调用self.panel.Layout()来重新计算并应用布局。

self.panel.Layout()的功能是重新计算并应用panel上的布局。当窗口大小发生变化时,可以调用该方法重新计算布局,从而保证控件的位置和大小能够随窗口的改变而自适应调整。

请注意,由于wxPythonmatplotlib的事件循环机制不同,动态绘图时可能会出现卡顿或闪烁的情况。如果需要更流畅的动画效果,可以考虑使用其他库,如PyQtGraphVispy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/900489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python入门【内存管理机制、Python缓存机制、垃圾回收机制、分代回收机制】(三十二)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…

Java IO流(二)IO模型(BIO|NIO|AIO)

概述 Java IO模型同步阻塞IO(BIO)、同步非阻塞IO(NIO)、异步非阻塞IO(AIO/NIO2),Java中的BIO、NIO和AIO理解为是Java语言对操作系统的各种IO模型的封装 IO模型 BIO(Blocking I/O) 概述 BIO是一种同步并阻…

『SpringBoot 源码分析』run() 方法执行流程:(1)初始化 SpringApplication 、上下文环境、应用上下文

『SpringBoot 源码分析』run() 方法执行流程:(1)初始化 SpringApplication 、上下文环境、应用上下文 基于 2.2.9.RELEASE问题:当方法进行了注释标记之后,springboot 又是怎么注入到容器中并创建类呢? 首…

Java入门必备|有你想知道的代码技巧

前言 本文主要分享记录学习Java时的敲代码大法,一步步与idea这个软件磨合,让它为我们敲代码这条路提供更便捷的帮助(雀食好用哈) 一.psvm 很多刚上手IJ软件,就被main()方法给折服了,这段代码量十分大 当…

常见指令以及权限理解

常见指令以及权限理解 命令格式: command [-options] parameter1 parameter1 命令 选项 参数1 参数2 1.command为命令名称,例如变化目录的cd等 2.中括号[ ]实际在命令中是不存在的,这个中括号代表可选,通常选项前面会添加一个符号…

Linux命令200例:clock的具体应用,设置系统的时钟时间、硬件时钟和定时器等相关信息

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

缺少或找不到vcruntime140_1.dll的解决方法

某天,当我准备打开电脑上的一个应用程序时,突然收到一个错误提示,显示缺少了vcruntime140_1.dll文件。这个文件是一个重要的系统组件,它的丢失导致了我无法正常运行该应用程序。于是,我开始了一场寻找和修复旅程。然而…

“深度学习”学习日记:Tensorflow实现VGG每一个卷积层的可视化

2023.8.19 深度学习的卷积对于初学者是非常抽象,当时在入门学习的时候直接劝退一大班人,还好我坚持了下来。可视化时用到的图片(我们学校的一角!!!)以下展示了一个卷积和一次Relu的变化 作者使…

leetcode 387.字符串中第一个唯一字符

⭐️ 题目描述 🌟 leetcode链接:https://leetcode.cn/problems/first-unique-character-in-a-string/description/ 思路: 比较优的方式使用相对映射记录的方式。在 ASCII 表中小写字母 -97 就是 0 - 25。在依次从前遍历查找即可。需要注意的…

论文笔记:Continuous Trajectory Generation Based on Two-Stage GAN

2023 AAAI 1 intro 1.1 背景 建模人类个体移动模式并生成接近真实的轨迹在许多应用中至关重要 1)生成轨迹方法能够为城市规划、流行病传播分析和交通管控等城市假设分析场景提供仿仿真数据支撑2)生成轨迹方法也是目前促进轨迹数据开源共享与解决轨迹数…

十六、Spring Cloud Sleuth 分布式请求链路追踪

目录 一、概述1、为什么出出现这个技术?需要解决哪些问题2、是什么?3、解决 二、搭建链路监控步骤1、下载运行zipkin2、服务提供者3、服务调用者4、测试 一、概述 1、为什么出出现这个技术?需要解决哪些问题 2、是什么? 官网&am…

RingBuffer 环形缓冲区----镜像指示位

文字和图片参考和来自这些文章: 大疆嵌入式软件编程题找鞍点_已知循环缓冲区是一个可以无限循环读写的缓冲区,当缓冲区满了还继续写的话就会覆_一禅的师兄的博客-CSDN博客 ring buffer,一篇文章讲透它? - 知乎 (zhihu.com) 1 概述 1.1 什…

Python可视化在量化交易中的应用(15)_Seaborn箱线图小提琴图

Seaborn中箱线图和小提琴图的绘制方法 箱线图和小提琴图常被用来观测数据的中位数、上下四分位数分布范围以及异常值的分布情况。 seaborn中绘制箱线图使用的是sns.boxplot()函数。 sns.boxplot(x,y,hue,data,order,hue_order,orient,color,palette,saturation0.75,width0.8,do…

C语言 功能型API --------------------strcat()

NAME strcat, strncat - concatenate two strings 头文件 SYNOPSIS #include <string.h> 函数原型&#xff1a; char *strcat(char *dest, const char *src); 功能&#xff1a; 在字符串dest的末尾将字符串src拼接上去 #include <stdio.h> #inc…

227、仿真-基于51单片机锅炉热电偶PT100铂电阻温度控制Proteus仿真设计(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图 三、原理图 四、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&…

LlamaGPT -基于Llama 2的自托管类chatgpt聊天机器人

LlamaGPT一个自托管、离线、类似 ChatGPT 的聊天机器人&#xff0c;由 Llama 2 提供支持。100% 私密&#xff0c;不会有任何数据离开你的设备。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 1、如何安装LlamaGPT LlamaGPT可以安装在任何x86或arm64系统上。 首先确保…

网络编程(TCP和UDP的基础模型)

一、TCP基础模型&#xff1a; tcp Ser&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <string.h> #include <head.h>#define PORT 88…

探索无限创造力的星辰大道,画出想象的浩瀚宇宙!-turtle

介绍 视频教程地址在此&#xff1a;https://www.bilibili.com/video/BV1Pm4y1H7Tb/ 大家好&#xff0c;欢迎来到本视频&#xff01;今天&#xff0c;我们将一同探索Python编程世界中的一个有趣而创意的库——Turtle库。无需专业绘画技能&#xff0c;你就可以轻松地用代码绘制…

docker的安装与基础使用

一.docker简介 1&#xff09;什么是docker Docker是一种用于构建、打包和运行应用程序的开源平台。它基于操作系统级虚拟化技术&#xff0c;可以将应用程序和其依赖的库、环境等资源打包到一个可移植的容器中&#xff0c;形成一个轻量级、独立的可执行单元。 开发者在本地编…

QT TLS initialization failed问题(已解决) QT基础入门【网络编程】openssl

问题: qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed 这个问题的出现主要是使用了https请求:HTTPS ≈ HTTP + SSL,即有了加密层的HTTP 所以Qt 组件库需要OpenSSL dll 文件支持HTTPS 解决: 1.加入以下两行代码获取QT是否支持opensll以…