首页 Matlab的GUI参数传递方式

Matlab的GUI参数传递方式

举报
开通vip

Matlab的GUI参数传递方式 Matlab的 GUI参数传递方式 matlab gui共有六种参数传递方式和范围各不相同 1.运用 gui本身的 varain{}、varaout{}传递参数(注:这种方式仅适用与 gui间传递数据, 且只适合与主子结构,及从主 gui调用子 gui,然后关掉子 gui,而不适合递进结构,即一步 一步实现的方式) 输入参数传递: 比如子 GUI的名称为 subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2) 在 subGUI的 m文件中...

Matlab的GUI参数传递方式
Matlab的 GUI参数传递方式 matlab gui共有六种参数传递方式和范围各不相同 1.运用 gui本身的 varain{}、varaout{}传递参数(注:这种方式仅适用与 gui间传递数据, 且只适合与主子结构,及从主 gui调用子 gui,然后关掉子 gui,而不适合递进结构,即一步 一步实现的方式) 输入参数传递: 比如子 GUI的名称为 subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2) 在 subGUI的 m文件中(由 GUIDE自动产生): 1).第一行的形式为:function varargout = subGUI(varargin) 该行不用做任何修改;varargin 和 varargout 分别是一个可变长度的 cell 数组(MATLAB 帮 助文件中有说明)。输入参数 in1和 in2保存在 varargin中,输出参数 out1,out2包含在 varargout 中; 2).在 subGUI的 OpeningFcn中,读入参数,并用 guidata保存,即: handles.in1 = varargin{1}; handles.in2 = varargin{2}; guidata(hObject, handles); 返回参数的设置: 1). 在 GUI 子程序的 OpeningFcn 函数的结尾加上 uiwait(handles.figure1); figure1 是 subGUI的 Tag; 2) . subGUI 中控制程序结束(如 "OK”和 "Cancel"按钮)的 callback 末尾加上 uiresume(handles.figure1),不要将 delete命令放在这些 callback中; 3). 在子 GUI的 OutputFcn中设置要传递出去的参数,如 varargout{1} = handles.out1; varargout{2} = handles.out2;末尾添加 delete(handles.figure1); 结束程序。 在 GUI的 OpenFcn中,如果不加 uiwait, 程序会直接运行到下面,执行 OutputFcn。也 就是说程序一运行,返回值就确定了,再在其它部分对 handles.output作更改也没有效果了。 加上 uiwait后,只有执行了 uiresume后,才会继续执行到 OutputFcn,在此之前用户有充分 的时间设置返回值。 通过以上设置以后,就可以通过 [out1, out2] = subGUI(in1, in2) 的形式调用该子程序。 在一个 GUI中调用另一个 GUI时,主 GUI不需要特别的设置,同调用普通的函数一样。在 打开子 GUI界面的同时,主程序还可以响应其它的控件。不需要担心子 GUI的返回值被传 错了地方。 2. 运用 global定义全局变量传递参数(适用于 gui内控件间以及不同 gui间) 这种方式恐怕是最简单的方式,是很省心!但是但是,简单的问题就在于有时你会很头 疼!因为在每一个要到该全局变量的地方,你都要添一句 gloal x,还有就是如果你在一个地 方修改了 x的值,那么所有 x的值就都变了!有的时候恐怕会出现紊乱。另一个更重要的问 题在于,套用 C++的一句话,全局变量破坏了程序的封装性!所以,全局变量是能少用尽量 少用。 3. 运用 UserData传递参数(gui内) 直接通过对象的 userdata属性进行各个 callback之间的数据存取操作。首先必须将数据 存储到一个特定的对象中,假设对象的句柄值为 ui_handle,需要存储的值为 value,则输入以 下程序即可: set('ui_handle','UserData',Value); 此时,value数据就存在句柄值为 ui_handle的对象内,在执行的过程中若要取回变量可 以通过以下方式在任意 callback中获取该数据值 : value=get(''ui_handle,'UserData'); 虽然使用这种方法简单 ,但是每个对象仅能存取一个变量值,因此当同一对象存储两 次变量时 ,先前的变量值就会被覆盖掉,因此都用 UserData存储简单与单一的数据。如下 面有两个 gui函数, myloadfn加载 mydata.mat文件,该文件内存储 XYData变量,其值 为 m*2 的绘图矩阵,加载后将该变量值存储到 当前的窗口的 UserData 属性中。另一个 myplotfcn函数则是用以获取该 UserData属性中存 取的绘图数据,然后绘图。代码如下: function myloadfcn load mydata; set(gcbf,'UserData',XYdata) function myplotfcn XYdata=get(gcbf,'UserData'); x=XYData(:,1); y=XYData(:,2); plot(x,y); 4.应用 setappdata\getappdata与 rmappdata函数(gui间和 gui内,推荐使用) 使用上面三个函数最有弹性处理数据的传送问题,与 UserData 的方式相类似,但是克 服 UserData的缺点,使一个对象能存取多个变量值。 (1)getappdata函数 VALUE=getappdata(H,NAME) (2)setappdata函数 setappdata(H,NAME,VALUE) (3)rmappdata rmappdata(H,NAME) 首先在 matlab命令窗口输入 magic(3)数据,因此当前的工作空间就存储了 magic(3)这组数据 了,然后建立一个按钮来获取并显示 magic(3)数据 >>A=magic(3); >>setappdata(gcf,'A','A');%save >>uicontrol(‘String’,'显示矩阵 A','callback','A=getappdata(gcf,'A')'); 当在主子 gui内调用时,可以如下设置 fig1 调用 fig2 时,使用 fig2 指令来打开 fig2,在 fig2 的 m 文件中,在回调函数中用 setappdata(fig1,'A',A)实现返回 fig1,并将参数 A 传递给 fig1,然后在 fig1 的使用 A 的地方 添加 A=getappdata(fig1,‘A’)。 但这种方式的一个问题就是没调用一次,fig1 的数据就得初始化一次,这是因为 setappdata(fig1,'A',A)中出现了 fig1,调用一次 setappdata就得运行一次 fig1的缘故,解决方 案就是把 setappdata(fig1,'A',A)改为 setappdata(0,'A',A),这样把 A读入 matlab workspace,相 当于一个全局变量了,但当然比直接用 global定义全局变量好! 5. 结合 handles和 guidata函数(gui内,不推荐使用,经常出现问题,比如在 handles中添 加了变量对象 Y后可能就会挤掉 handles另外一个对象) 他的使用格式如下,如果你在 pushbutton1 中得到一个变量 X,相传出去,那么在 pushbutton1的 callback中,在得到 X后添加如下代码: handles.X=X; guidata(hObject,handles)(注意,一定是两行连写) 在 pushbutton2中要用到 X是,在其 callback先添加 X=handles.X; 即可得到 X的值。 6. 运用 save和 load(importdata)传递参数(gui内和 gui间) 将某变量 x 的值先存到磁盘,用的时候在调用。格式如下:save('*.mat','x');用的时候 就用 load('*.mat'),但这样只是把 x读 到了 matlab workspace,不会用显示,你还要再去查看 这个变量名, 然后才能用,建议使用 p=importdata('*.mat'),p 是一个结构体,可以随意使 用了。当然,这种方式涉及到磁盘读写,速度当然会有影响 的,一般情况不用,通常用在 保存以及导入某个变量时!
本文档为【Matlab的GUI参数传递方式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_106903
暂无简介~
格式:pdf
大小:98KB
软件:PDF阅读器
页数:3
分类:互联网
上传时间:2010-08-13
浏览量:32