matlab控件之间参数,Matlab GUI教程0x6–多个GUI中参数的传递(高级)

GUI中参数传递和数据共享一直是很多GUI初学者头疼的问题,但是这个问题却有经常遇到,在GUI编程中是不可避免的。

特别是,在GUI的多个不同fig之间实现数据共享,初学者更加束手无策了。

呵呵,不要太紧张,本节教程将向大家演示如何跨越GUI中这条蜀道。

其实MATLAB提供了很多种直接或间接方法实现多fig中的数据共享,只是大家没有注意罢了:

1、全局变量

2、作为函数的参数传递

3、利用控件的userdata数据

4、为handles结构体添加新字段

5、setappdata函数为句柄添加数据

6、跨空间计算evalin和赋值assignin

7、将数据保存到文件,需要时读取

8、带参数调用GUI的M文件

9、嵌套函数(不适用于GUIDE中,只适用纯命令是的GUI)

本文将介绍一种我认为比较方便的综合性方法!先大概说下原理吧:

运行GUI的M文件的时候默认返回GUI的figure对象的句柄fh,此时我们可以使用guidata函数获取fh中所有控件的信息,其它数据我们可以通过给handles结构体增加新字段形式添加

获取数据模板

fh=mygui;

myhandles=guidata(fh);

myhadles.mytag

复制代码

添加字段模板

handles.mydata=mydata;

guidata(hObject,handles);

复制代码

关于带输入参数格式调用GUI的M文件,这个功能大家用的不多,但是有时却很必要或处理某些问题很方便,可以参考Matlab的帮助,在这里我不详细介绍!

如果是同一个GUI中数据共享参考另外一个教程

28db1387e32b948ff4df0674cae8f340.png   

a6e13c299574d21f2057e3efd330c007.png

该程序实现如下简单功能:在任意一个窗体可以获取在另外一个窗体上输入的字符串,并显示在自己的窗体上!

0ca475f7b41324b8669773393d834097.png   

bac0f13b0c39224a17f7afdbd11a3146.png

3、点击GUIDE工具栏的

773233a9632da1ab4d86adafc4412f48.png 按钮,自动跳转到相应的M文件

4、 首先我们定位到Quan.m文件的pushbutton1_Callback回调函数处,输入以下内容

% 获取Daniel窗体的句柄

% 调用GUI的M文件时,默认返回窗体句柄,至于带参数调用GUI的M文件请查看帮助

danielFigureHandle  = daniel;

% 使用guidata函数提取Daniel窗体上所有空间的信息

% 此时我们就能很容易操作Daniel的数据了

danielData = guidata(danielFigureHandle);

% 提取Daniel窗体上文本框内的字符串

% 注意此时的结构体是danielData不是handles

daniel_input = get(danielData.editText_Daniel,’String’);

% 将提取的字符串显示在Quan窗体上

% 这个就是简单的数据共享

set(handles.display_daniel_input,’String’,daniel_input);

% 再次强调dnielData一个以Daniel窗体所有控件的tag为字段的结构体

% 结构体的值就是对应控件的句柄

% 而handles是本窗体的结构体,不要与dnielData混淆

复制代码

5、同理打开Daniel.m文件,在pushbutton1_Callback后面添加

quanFigureHandle  = quan;  %stores the figure handle of Quan’s GUI here

%stores the GUI data from Quan’s GUI here

%now we can access any of the data from Quan’s GUI!!!!

quanData = guidata(quanFigureHandle);

%store the input text from Quan’s GUI

%into the variable quan_input

quan_input = get(quanData.editText_Quan,’String’);

%set the static text on Daniel’s GUI to match the

%input text from Quan’s GUI

set(handles.display_quan_input,’String’,quan_input);

%notice that quanData is the structure containing the data from Quan’s GUI

%notice that handles is the structure containing data from Daniel’s GUI,

%which is the local GUI (i.e., the GUI that this function is running from)

复制代码

6、此时任意一个GUI并点击“Get ** Inputs”,此时另外一个GUI会自动启动,并获取它的“string”于是实现了一个简单的两个GUI中数据共享了。

大家可以体会下,并根据自己的需要修改相关代码,应该就可以实现自己的要求了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值