wxPython使用matplotlib绘制动态曲线

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 FigureCanvasclass 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.1self.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.rhkb.cn/news/96944.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html2canvas生成图片地址Base64格式转成blob在转成file(二进制)可正常发送(保姆教程,复制粘贴可用)

开始: 最终结果: 1. html2canvas方法生成的图片地址已Base64编码形式放在img标签src中可直接展示生成的图片(注意页面标签获取位置,还有个setTimeout页面渲染需要时间) setTimeout(function () {var result {};v…

349. 两个数组的交集 题解

题目描述:349. 两个数组的交集 - 力扣(LeetCode) 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 方法一: 解题思路: 我们可以…

webshell实践,在nginx上实现负载均衡

1、配置多台虚拟机,用作服务器 在不同的虚拟机上安装httpd服务 我采用了三台虚拟机进行服务器设置:192.168.240.11、192.168.240.12、192.168.240.13 [rootnode0-8 /]# yum install httpd -y #使用yum安装httpd服务#开启httpd服务 [rootnode0-8 /]# …

基于深度学习的铁路异物侵限检测算法研究_整体认知感觉欠点意思,但是有一个新的变形卷积-Octave 卷积

相比于其他的交通运输方式,铁路运输具有准时性高、连续性强、速度快、运输量大、运输成本低以及安全可靠等优点。同时由于国家高速铁路网络建设的不断推进,铁路运输逐渐成为我国客运与货运的主要运输方式。虽然铁路运输为人们出行和货物运输带来的极大的…

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是一种同步并阻…

计算机组成与设计 Patterson Hennessy 笔记(二)MIPS 指令集

计算机的语言:汇编指令集 也就是指令集。本书主要介绍 MIPS 指令集。 汇编指令 算数运算: add a,b,c # abc sub a,b,c # ab-cMIPS 汇编的注释是 # 号。 由于MIPS中寄存器大小32位,是基本访问单位,因此也被称为一个字 word。M…

汽车领域专业术语

1. DMS/OMS/RMS/IMS DMS:即Driver Monitoring System,监测对象为Driver(驾驶员)。DMS三大核心: OMS:即Occupancy Monitoring System,监测对象为乘客。 RMS:后排盲区检测系统 IMS&…

PHP自己的框架实现config配置层级存取(完善篇二)

1、实现效果 config(include_once $coreConfig); //加载配置文件config() //获取所有配置 config(DB_HOST) 获取配置 2、按层级配置文件加载,存取配置项 config,function.php function config($varNULL,$valueNULL){static $configarray();if(is_array($var)){…

redis Windows版本安装过程(5.0.14)

官网不提供Windows版本的redis安装包,但可以在GitHub网站上找到redis的安装包: Releases tporadowski/redis GitHub (相比较Linux其他版本的Redis,Windows版的redis的缺点是版本比较老,官方不提供且不更新) 1、zip…

vue使用

详解vue使用Echarts画柱状图_vue.js_脚本之家 Vue修改按钮间距使用 margin-left Vue3 定义变量 (没有data了) vue3的setup函数中定义data数据,使用data数据_vue3 data_半里_辰昏的博客-CSDN博客 const showFlag ref(false) 修改值&#…

Java源码分析(一)Integer

当你掌握Java语言到了一定的阶段,或者说已经对Java的常用类和API都使用的行云流水。你会不会有一些思考?比如,这个类是如何设计的?这个方法是怎么实现的?接下来的一系列文章,我们一起学习下Java的一些常见类…

【河源源城紫金】IBM 3650 M4服务器主板维修

河源市源城区某财政单位2台IBM System x3650 M4 服务器黄灯故障无法开机,面板报错BOARD黄灯警告,如上图所示,这位客户通过单位朋友介绍,报修2台单位的IBM服务器,冠峰工程师接到客户报修信息后,售后小哥随即…

Linux笔试题(4)

67、在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是__C_ A.主机ip设置有误 B.没有设置连接局域网的网关 C.局域网的网关或主机的网关设置有误 D.局域网DNS服务器设置有误 解析:在局域网络内的某台主…

WebGL和OpenGL之间的差异

推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 WebGL和OpenGL是与图形处理有关的技术标准,它们在计算机图形中扮演着重要的角色。本文将介绍WebGL和OpenGL的区别,并重点介绍"WebGL"和"OpenGL"的特点。 一…

226、仿真-基于51单片机楼道教室走道智能灯光光照人体感应检测控制Proteus仿真设计(程序+Proteus仿真+配套资料等)

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

16.3.2 【Linux】程序的管理

程序之间是可以互相控制的。举例来说,你可以关闭、重新启动服务器软件,服务器软件本身是个程序, 你既然可以让她关闭或启动,当然就是可以控制该程序。 使用kill-l或者是man 7 signal可以查询到有多少个signal。主要的讯号代号与名…

当众讲话与演讲口才沙龙活动策划方案

活动名称:当众讲话与演讲口才沙龙 活动目的: 当众讲话与演讲口才沙龙旨在提升参与者的演讲口才能力,培养自信心和表达能力,促进交流与分享。通过举办此活动,我们希望能够帮助参与者克服公众演讲的恐惧,提…

C++ string 的用法

目录 string类string类接口函数及基本用法构造函数,析构函数及赋值重载函数元素访问相关函数operator[]atback和front 迭代器iterator容量操作size()和length()capacity()max_sizeclearemptyreserveresizeshrink_to_fit string类对象修改操作operatorpush_backappen…

【Flink】Flink窗口触发器

数据进入到窗口的时候,窗口是否触发后续的计算由窗口触发器决定,每种类型的窗口都有对应的窗口触发机制。WindowAssigner 默认的 Trigger通常可解决大多数的情况。我们通常使用方式如下,调用trigger()方法把我们想执行触发器传递进去: SingleOutputStreamOperator<Produ…

vue3.0 element-plus 不同版本 el-popover 循环优化

表格内循环el-popover 渲染以后的页面&#xff0c;数据量很大的时候页面会卡&#xff0c;生成的代码&#xff1a; 解决思路&#xff1a;将el-popover提出来&#xff0c;不参与循环&#xff0c;让el-popover只渲染一次 1、以1.1.0-beta.24版为例&#xff08;低版本&#xff09;…