Matlab实现多个窗口间的数据传递(不用GUIDE)

news2024/12/24 2:25:44

在用多个matlab的figure进行数据交互时,数据传入是较为简单的,可以直接用function的形参实现,但如何把数据传回,是个比较麻烦的问题。

在GUIDE下,系统自动生成了output_fcn函数,可以用它来实现从子窗口到主窗口的数据传回,但如果是手写figure,就没有这个函数了。为此,考虑用setappdata和getappdata来实现这个功能。

写了个简单的demo程序,先看下效果:

程序一上来,先打开上面的主窗口,里面的编辑框里写了一些字符参数。点击按钮,可以打开第二个窗口,也就是子窗口,里面传入了主窗口里的参数。

子窗口也有一个编辑框和一个按钮,编辑框里显示的是从主界面传入的变量。可以在这里手改。改动后,点击按钮,子窗口就自动消失,然后改动的变量在主界面里显示。

 

这就实现了数据的互相传递了。

 下面,直接把代码附上,在讲解。

function main

% 创建示例数据
data.info.name = 'test';
data.info.date = '2022-10-10';
data.info.flag = 'true';
data.test = rand(10);
info = data.info;

% 创建窗口
hfig = figure('Tag','main_fig123',...
    'Name','主窗口',...
    'NumberTitle','off',...
    'Units','normalized',...
    'position',[0.3 0.3 0.4 0.4],...
    'Toolbar','none',...
    'MenuBar','none',...
    'Resize','on',...
    'DockControls','off',...
    'Color',[0.9255 0.9137 0.8471]);

% 创建按钮控件
hbtn = uicontrol(hfig,...
    'Style','pushbutton',...
    'String','打开子窗口',...
    'Tag','ok_button',...
    'units','normalized',...
    'position',[0 0.8 1 0.1],...
    'Callback',{@sub});


% 创建编辑控件
hed1 = uicontrol(hfig,'Style','edit','Tag','edit1','String',info.name,...
    'units','normalized','position',[0.2 0.6 0.6 0.1]);
hed2 = uicontrol(hfig,'Style','edit','Tag','edit2','String',info.date,...
    'units','normalized','position',[0.2 0.4 0.6 0.1]);   
hed3 = uicontrol(hfig,'Style','edit','Tag','edit3','String',info.flag,...
    'units','normalized','position',[0.2 0.2 0.6 0.1]);


setappdata(hfig,'info',info);
          
end



function sub(hObj,event)

hfig = findobj('Tag','main_fig123');
if length(hfig)>1
    return;
end
info = getappdata(hfig,'info');

% 创建窗口
hfig_sub = figure('Tag','main_fig',...
    'Name','子窗口',...
    'NumberTitle','off',...
    'Units','normalized',...
    'position',[0.4 0.4 0.3 0.3],...
    'Toolbar','none',...
    'MenuBar','none',...
    'Resize','on',...
    'DockControls','off',...
    'Color',[0.9255 0.9137 0.8471]);

% 创建按钮控件
hbtn = uicontrol(hfig_sub,...
    'Style','pushbutton',...
    'String','数据传回',...
    'Tag','ok_button',...
    'units','normalized',...
    'position',[0 0.7 1 0.1],...
    'Callback',{@sub_btn_click});

% 创建编辑控件
hed1 = uicontrol(hfig_sub,'Style','edit','Tag','sub_e1','String',info.name,...
    'units','normalized','position',[0.2 0.3 0.6 0.1]);

end




function sub_btn_click(hObj,event)

% 查找子窗口的编辑框
hed1 = findobj('Tag','sub_e1');
name = get(hed1,'String');

% 查找数据
hfig = findobj('Tag','main_fig123');
if length(hfig)>1
    return;
end
info = getappdata(hfig,'info');

% 写入新数据
info.name = name;
setappdata(hfig,'info',info);

% 关闭当前窗口
close(gcf);

% 更新主窗口控件
hed1 = findobj('Tag','edit1');
set(hed1,'String',info.name);


end



程序不长,里面用两个函数分别实现了主窗口和子窗口,另外对两个按钮的回调函数也进行了实现。主要逻辑是:

  • 在主程序里先把要传递的数据存入主程序的某个控件中,比如就主窗口。
  • 主程序点击按钮,召出子窗口。
  • 子窗口找到主窗口的句柄,然后把appdata传过来,再显示到控件上。
  • 子窗口点击按钮,将控件里的信息保存到appdata中(这里的信息是新信息)。这里其实已经完成了数据传递,只要关闭窗口,并实现主程序的显示逻辑即可。

还是很简单的吧,而且都没用到uiwait和uiresume。

 

 

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

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

相关文章

【P4】JMeter 原生录制方式——HTTP代理服务器

文章目录 一、准备工作二、原生录制方式——HTTP2.1、设计说明2.2、测试计划设计 三、原生录制方式——HTTPS3.1、设计说明3.2、测试计划设计 四、HTTP代理服务器主要参数说明4.1、目标控制器4.2、分组:在组间添加分割4.3、分组:每个组放入一个新的控制器…

2023年清华大学五道口金融学院招收公开招考博士研究生(普博)拟录取名单公示

公示期:十个工作日( 2023年4月24日至5月9日 ) 经综合考核和研究生招生工作领导小组讨论,报学校研究生招生工作领导小组批准,清华大学五道口金融学院2023年公开招考博士研究生拟录取名单,现已确定&#xff…

Python 扩展教程(1): 调用百度AI

关于AI 自有计算机以来,人们就想让计算机具有人的感知、意识、概念、思维、行为,代替人的工作。AI (Artificial Interligence)是计算机科学的一个分支,专注研究、开发、模拟、扩展人的智能的理论、方法、技术及应用。 从研究领域和方法上&…

【Linux】6. 实现进度条和git基本认识和使用

编写小程序 – 进度条 1. 理解缓冲区概念 2. 理解\n 和 \r的区别 在操作系统层面:\n 表示换行 \r表示回车 在语言层面: \n就是回车换行 3. 进度条的需求分析 4. 代码编译 5. 代码优化 到这里进度条的编写也就完成了,✿✿ヽ(▽)ノ✿&#…

C语言基础应用(六)数组

引言 现程序要求,录入班里60名同学的所有成绩,我们应该怎么录入呢?按照我们之前所学习的难道要声明60个变量来录入成绩嘛? 就像: int main() {int a1,a2,a3,...,a60;scanf("%d%d%d...%d",&a1,&a2,…

anaconda使用教程

一.创建conda虚拟环境 conda create -n AI python3.8 conda create -n #代表创建conda虚拟环境 AI #创建的虚拟环境的名称 python3.8 #代表指定的Python版本 二.查看已创建的conda虚拟环境 conda env list三.激活conda虚拟环境 conda activate AI #AI 是co…

手把手教你爬取网站信息

如题,理解这一部分需要一定的Python基础,有些代码我不做详细解释了,但是用这个方法是确实可以爬到的。 此次用以下这个页面(可以用md5软件解密) 1476409DEDD7A55FE86915BC370A3ECD 爬取电影的详情数据 1. 在抓包⼯具…

Linux常见指令 (2)

Linux常见指令 ⑵ 补充man描述:用法:例子 echo描述:用法:例子 echo 字符串例子 echo 字符串 > 文件例子 追加重定向(>>)例子 输出重定向(>)来创建文件 && (>)来清空文件 cat描述:用法:例子 cat && cat 文件补充:例子 cat 文件 && cat &…

深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台

深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台 一、认识SeaTunnel二、SeaTunnel 系统架构、工作流程与特性三、SeaTunnel工作架构四、部署SeaTunnel1.安装Java2.下载SeaTunnel3.安装连接器 五、快速启动作业1.添加作业配置文件以定义…

ChatGPT火了,将给网络安全行业带来什么影响?

ChatGPT火了,将给网络安全行业带来什么影响? 一、简介 作为全新的人工智能(AI)聊天机器人,ChatGPT被认为正在“掀起新一轮AI革命”。在股市上甚至出现了“ChatGPT概念股”的当下,ChatGPT究竟对于网络安全…

Mysql 苞米豆 多数据源 读写分离(小项目可用)

目录 0 课程视频 1 配置 1.1 加依赖 1.2 yml 配置文件 -> druid配置后报错 搞不定 2 代码 2.1 实体类 2.2 mapper -> 调用操作数据库方法 操作数据库 2.3 service -> 指定数据源 -> 用Mapper 接口 -> 操作数据库 2.4 controller -> 用户使用接口 -&…

当~python批量获取某电商:商品数据并作可视化

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: 首先我们先来安装一下写代码的软件&#xff08;对没安装的小白说&#xff09; Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 专业版是付费的 <文章下方名片可获取魔法永久用~> 社区版是免费的 …

利用Python如何实现数据驱动的接口自动化测试

目录 前言 1、需求 2、方案 3、实现 总结 前言 大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Python3对CSV的写入和读取。下面话不多说了&#xff0c;来一起看看详细的介绍吧。 1、需求 某API&#xff0c;GET方法&#xff…

HbuilderX打包AndroidAPP使用教程

HBuilder是DCloud&#xff08;数字天堂&#xff09;推出的一款支持HTML5的Web开发IDE。HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写。它基于Eclipse&#xff0c;所以顺其自然地兼容了Eclipse的插件。 HbuildX打包android的apk安装包时需要新建项目 …

Insix:面向真实的生成数据增强,用于Nuclei实例分割

文章目录 InsMix: Towards Realistic Generative Data Augmentation for Nuclei Instance Segmentation摘要本文方法数据增强方法具有形态学约束的前景增强提高鲁棒性的背景扰动 实验结果 InsMix: Towards Realistic Generative Data Augmentation for Nuclei Instance Segment…

Go语言开发小技巧易错点100例(七)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

云原生Istio基本介绍

目录 1 什么是Istio2 Istio特征2.1 连接2.2 安全2.3 策略2.4 观察 3 Istio与服务治理3.1服务治理的三种形态 4 Istio与Kubernetes4.1 Kubernetes介绍4.2 Istio是Kubernetes的好帮手4.3 Kubernetes是Istio的好基座 5 Istio与服务网格5.1 时代选择服务网格5.2 服务网格选择Istio …

【Python入门】Pycharm的使用指南

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

五、C++内存管理机制 —— 分配器allocator(侯捷)

侯捷 C八部曲笔记汇总 - - - 持续更新 ! ! ! 一、C 面向对象高级开发 1、C面向对象高级编程(上) 2、C面向对象高级编程(下) 二、STL 标准库和泛型编程 1、分配器、序列式容器 2、关联式容器 3、迭代器、 算法、仿函数 4、适配器、补充 三、C 设计模式 四、C 新标准 五、C 内存管…

剑指 Offer 12. 矩阵中的路径 / LeetCode 79. 单词搜索(深度优先搜索)

题目&#xff1a; 链接&#xff1a;剑指 Offer 12. 矩阵中的路径&#xff1b;LeetCode 79. 单词搜索 难度&#xff1a;中等 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 fals…