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 myloadfcnload mydata;set(gcbf,'UserData',XYdata)function myplotfcnXYdata=get(gcbf,'UserData');x=XYData(:,1);y=XYData(:,2);plot(x,y);4.应用setappdatagetappdata与rmappdata函数(gui间和gui内,推荐使用)使用上面三个函数最有弹性处理数据的传送问题,与UserData的方式相类似,但是克服UserData的缺点,使一个对象能存取多个变量值。
(1)getappdata函数VALUE=getappdata(H,NAME)(2)setappdata函数setappdata(H,NAME,VALUE)(3)rmappdatarmappdata(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是一个结构体,可以随意使用了。
当然,这种方式涉及到磁盘读写,速度当然会有影响的,一般情况不用,通常用在保存以及导入某个变量时!m文件中每个callback都可以视为一个独立执行的接口,也就说每个callback之间无法做沟通操作,因此变量传递会有问题,有以下几种方式可以解决不同的回调函数之间的数据传递问题:1.使用全局变量当前有一组运算数据放在a必须在tag名称为pushbutton1与pushbutton2所对应的对象callback中使用,因此必须在双方的callback中都设置这个数据a为全局变量。
functin pushbutton_1(hobject,eventdata,handles)%hobjecet 按钮一的句柄%handles 用作存储用户数据的句柄(下一小节会用到)global a %将a声明为全局变量functin pushbutton_2(hobject,eventdata,handles)global a %将a声明为全局变量通过以上的声明,a就成为跨越两个按钮的数据2.应用对象的userdata直接通过对象的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 myloadfcnload mydata;set(gcbf,'UserData',XYdata)function myplotfcnXYdata=get(gcbf,'UserData');x=XYData(:,1);y=XYData(:,2);plot(x,y);3.应用setappdatagetappdata与rmappdata函数使用上面三个函数最有弹性处理数据的传送问题,与UserData的方式相类似,但是克服UserData的缺点,使一个对象能存取多个变量值。
matlab GUI 数据共享
matlab GUI 编程(2008-05-10 19:35:14)转载▼标签:matlab gui guidata gcbo 杂谈首先创建新的GUI工程File->New->GUI然后拖放各种各样自己需要的控件工程会生成与fig文件同名的m文件在每个函数的注释里,matlab都会提示你使用GUIDATA和GCBOGCBO是获得全局回调对象句柄的函数(Global Call Back Object)GUIDATA存放了数据,我们可以利用它存放我们需要的数据,给其他函数使用。
例如我放了两个按钮和一个坐标轴,它会自动生成pushbutton1_Callback和pushbutton2_Callback两个回调函数然后我在pushbutton1里面用Guidata获得全局数据data,然后用rand生成随机数,放在data.x里面,用guidata把它放回全局数据里;然后在pushbutton2里面用Guidata把data.x取出来画它的3次方。
代码如下:% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDA TA)data = guidata(gcbo); % get data of global objectdata.x = rand(100,1); % add rand nums x to dataguidata(gcbo,data); % set new data to global objectaxes(data.axes1); % activate the axes1plot( data.x ); % plot the random numbers% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDA TA)data = guidata(gcbo); % get data of global objectaxes(data.axes1); % activate the axes1hold on;plot( data.x.^3,'r' ); % plot the cubic of the random numbershold off;。
MATLABGUI不同控件函数间变量传递方法
MATLABGUI不同控件函数间变量传递方法在MATLABGUI中,不同控件之间可以通过多种方法进行变量传递。
下面将介绍几种常见的方法:1. 全局变量(Global Variable):这是一种简单而直接的变量传递方法。
在MATLAB程序中定义一个全局变量,并在各个函数中使用它。
例如,在GUI的主回调函数中定义一个全局变量,并在其他的控件函数中使用它。
但是,使用全局变量会导致代码的可读性和可维护性下降,并且容易产生命名冲突。
2. 数据导入和导出(Import and Export Data):将数据保存在磁盘上的文件中,然后在不同的控件函数中读取和写入这个文件。
例如,可以将数据保存为MAT文件或者文本文件,并在各个函数中使用load和save等函数进行读写操作。
这种方法的优点是简单易懂,但是频繁的文件读写操作可能会降低程序的效率。
3. 句柄传递(Handle Passing):将一个控件的句柄作为参数传递给其他控件函数,从而在不同的函数中共享变量。
句柄是MATLAB中用来表示图形对象的引用,可以通过函数get和set等来读写对象的属性。
例如,可以通过get函数获取一个控件的句柄,然后将它作为参数传递给另一个控件函数,在该函数中使用set函数来修改该控件的属性。
这种方法的优点是简洁高效,但是需要对MATLAB图形编程有一定的了解。
4. 事件驱动(Event-driven):利用控件的事件回调函数来进行变量传递。
例如,在一个按钮的回调函数中,可以将一些变量的值设为按钮的状态,然后在其他控件的回调函数中读取该变量的值。
这种方法是一种典型的事件驱动编程,可以应对复杂的用户交互操作。
5. 句柄界面(Handle Interface):在GUI的主回调函数中,定义一个句柄结构体,用来存储各个控件的句柄和相关变量。
然后,将该句柄结构体传递给其他控件函数,在这些函数中通过句柄结构体来访问和修改所需的变量。
这种方法可以很好地解决不同控件之间的变量传递问题,并且方便扩展和维护。
Matlab GUI FAQ
F&Q:说明:以下网站都是在制作Matlab GUI过程中遇到问题而查找到的网站,这些网站解决了很多问题,希望也能对大家有所帮助。
事实上Matlab自身的HELP文档是最好的自学及释疑资料。
另外,Matlab官网()和CSDN()也可以提供大量十分有用的资料和帮助。
1.Matlab GUI数据传递:/s/blog_630c70530100ies5.html2.Matlab GUI函数调用与数据传递:/s/blog_45b486b80100gs1p.html3.Matlab 串口实时波形显示例子:/view/ddb134f57c1cfad6195fa758.html4.掌握和精通Matlab GUI设计:/view/352d7268a98271fe910ef92d.html5.Matlab GUI中控件的使用:/link?url=2fRiKlE7-co1Y32D0084uLuOhAF174 WbvA7I0vY8SQoT7Maq0T8_dTtObbpLCjR5e8M50MW0j1p2Ii4V5ui9 GX6X4IcEcp9Af14JBhlVxJ_6.Matlab怎样关闭已经被clear的串口:/thread-25368-1-1.html7.Matlab串口操作:/s/blog_6163bdeb0102e8qc.htmlMatlab 在edit/listbox中循环输出,但不覆盖之前数据的方法:/blog/static/40822553201311113595161 3/8.如何清除串口缓存:/matlabcentral/answers/102268-how-can-i-empty-the-serial-port-buffer-in-matlab-without-using-the-instrument-c ontrol-toolbox9.Matlab 读取文件各种方法:/xianghang123/archive/2011/12/06/2277602. html10.Matlab字符串转换及数换/link?url=FUHxbN-QlNi2fJu4ZlwTVapMWRgp 6TD9ia_bil77uCSJxarnwBZqTBRnd_iQjszjthHXpgmVMBuZ5jP7PcG7 N-cjPEvgNQy5uJxVe8daH3C11.在Matlab中读取、写入二进制数据文件/lxfan_0406@126/blog/static/60969926201151892 82228/12.关于matlab gui定时器绘图的一个问题/thread-237619-1-1.html13.Matlab将GUI转化为exe文件,并且进行发布/s/blog_4d633dc70100o9hz.html/blog/static/12771428420123251 1303366//s/blog_690bcb270100ncur.html14.使用Matlab命令:/note/136332003/15.上位机软件接口说明:/link?url=OgVsC2m6-VrvePrQjCdOKd3U1w_5 4rwqakm_FOMezDw9Kn63CvY5tMw_HxrFC69Gqn_1HoU-7y84uIfDn zbmN1UEoqC_tu4wEMmozDRHxbu16.基于USB的实时数据采集系统及其在MATLAB中的应用/link?url=_wvot9LVtQziplJOOZ3Y_NOhw95y1 vvldd2dMMLaxufVRCJO0yoiRoOy1kiVI2mFM4avXeL4-Mj5otJH9HXa Z8aPMc8mRFpk37wntMGUtsO17.Matlab控制串口/usb 进行设备通讯/fml927/blog/141010USB devices:/products/instrument/supported/usb.html 18.在串口通信开发中实现自动查找串口端口的方法/uid-20672257-id-2973926.html19.Matlab和C联合编程:/climbingc/article/details/669899920.MATLAB中为GUI添加背景图片的方法/view/7d8eae365a8102d276a22fe8.html 21.Matlab教程:/Index.html22.四轴飞行器1.4 姿态解算和Matlab实时姿态显示/adfjhg/p/3918316.html23.MATLAB画图格式设置/s/blog_67d36d860100xf2d.html。
Matlab GUI 编程心得
Matlab GUI编程心得一、GUI背景制作在Fcn函数内添加代码:ha=axes('units','normalized','position',[0 0 1 1]);uistack(ha,'top') %改变对象顺序II=imread('禾木01.bmp');image(II)colormap grayset(ha,'handlevisibility','off','visible','off');二、GUI中按钮、工具栏按钮添加图片改变button属性中CData值为图片:II=imread('禾木01.bmp');Set(handles.pushbutton1,’CData’,II);%imresize()可以改变图像大小三、GUI内与GUI间数据的数据传递GUI内部数据传递可以通过:handles.a=a1;handles.b=b1;或通过结构体:handles.c=struct{‘c1’,v1,’c2’,v2,’c3’,v3};然后利用handles.c.c1进行数据传递;GUI之间的数据传递:可以利用GUI本身的输入输出进行数据传递。
比如要实现[out1,out2]=GUI(in1,in2)-GUI 为GUI的名字(函数名),可以在OpenningFcn中添加handles.in1=varargin{1};handles.in2=varargin{2};guidata(hObject,handles);并在末尾添加uiwait(handles.figure1);%figure1为子GUI界面的句柄然后在OutputFcn中添加varargout{2}=handles.out1;varargout{3}=handles.out2;delete(handles.figure1); %delete函数不能乱放,在有输出参数时一定要放在程序运行的末尾,即OutputFcn中(没有输出参数时可以放在其他地方)。
Matlab GUIDE使用说明(Matlab GUI界面)
去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。
从简单的例子说起吧。
创建Matlab GUI界面通常有两种方式:1,使用.m文件直接动态添加控件2.使用GUIDE快速的生成GUI界面显然第二种可视化编辑方法算更适合写大型程序。
一:创建GUI1.在.m文件中动态添加例如h_main=figure(‘name’,‘a demo of gui design’,‘menubar’,‘none’,…'numbertitle','off','position',[100100300100]);h_edit=uicontrol('style','edit','backgroundcolor',[111],'position',[20205020],...'tag','myedit','string','1','horizontalalignment','left');h_but1=uicontrol('style','pushbutton','position',[20505020],'string','INC',...'callback',['v=eval(get(h_edit,''string''));',...'set(h_edit,''string'',int2str(v+1));']);h_but2=uicontrol('style','pushbutton','position',[80505020],'string','DEC',...'callback',['v=eval(get(h_edit,''string''));','set(h_edit,''string'',int2str(v-1));']);2.使用GUIDE帮助创建GUI在Command里面输入GUIDE或者从菜单里面,或者从快捷按钮均可进入GUIDE新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图,可以使用如下工具:Layout Editor:布局编辑器;Alignment Tool:对齐工具;Property Inspector:对象属性观察器;Object Browser:对象浏览器;Menu Editor:菜单编辑器。
matlab参数传递
matlab参数传递(最新版)目录1.MATLAB 参数传递的概述2.MATLAB 参数传递的方式3.使用 MATLAB 参数传递的注意事项正文一、MATLAB 参数传递的概述MATLAB 是一种广泛应用于科学计算、数据分析、可视化等领域的编程语言。
在 MATLAB 中,函数之间通过参数传递数据,实现函数的功能。
参数传递是函数之间数据交流的一种方式,通过参数传递,我们可以实现函数的复杂功能,提高代码的复用性和可读性。
二、MATLAB 参数传递的方式MATLAB 参数传递的方式主要有以下两种:1.值传递值传递是 MATLAB 中最常用的参数传递方式。
当一个函数调用另一个函数时,会将实参的值传递给形参。
在值传递过程中,实参和形参是两个独立的变量,它们之间并不存在直接的联系。
因此,当函数执行完毕后,实参的值并不会发生改变。
2.引用传递引用传递是 MATLAB 中另一种参数传递方式。
当一个函数调用另一个函数时,会将实参的地址传递给形参。
在引用传递过程中,实参和形参共享同一个内存空间,因此,当函数执行完毕后,实参的值会发生改变。
三、使用 MATLAB 参数传递的注意事项在使用 MATLAB 参数传递时,需要注意以下几点:1.确定参数传递方式在使用参数传递时,需要根据实际需求确定使用值传递还是引用传递。
对于不需要修改实参值的情况,可以使用值传递;对于需要修改实参值的情况,可以使用引用传递。
2.避免参数名重复在编写函数时,应确保不同函数的参数名不同,避免出现参数名重复的情况。
如果出现参数名重复,可能导致函数调用失败。
3.注意参数的顺序在调用函数时,应确保参数的顺序与函数定义时的顺序一致。
如果参数顺序不一致,可能导致函数调用失败。
综上所述,MATLAB 参数传递是函数之间数据交流的一种方式,通过参数传递,我们可以实现函数的复杂功能,提高代码的复用性和可读性。
阿英讲多个matlabgui之间的数据传递
阿英讲多个matlabgui之间的数据传递1 为什么要多个GUI之间参数传递?在matlab编写GUI界面时候,我们要很多个界面,例如figA和figB,figA中的一个按钮来打开figB,当需要在figB中设置一些参数,然后把那些参数值返回给figA中的按钮的那个callback,以在figA中使用figB传过来的数据。
"为了这个整了好几天头都了。
今天终于看到希望了哈哈,做个备注。
" ------ 首先感谢原作者无私分享他的知识,是你节省了我的学习时间。
2 缘起昨天在网上看了好多帖子,好多前辈都是把他成功的经验分享了一下,没有给具体的多个GUI之间数据传递的例子,或者举的例子没有详细的说明核心的参数传递机制。
这给初学者带来了学习的瓶颈,增加了入门难度。
此文的宗旨在于详细介绍多GUI之间数据传递的原理,结合实际例子深入浅出的把GUI参数传递的方法教给需要这方面知识的人。
愿大家得大智慧,发无上心!3 正文依次实践了下网上流传的多个GUI之间数据传递方式,我个人感觉好用的由以下三种方案,同时也推荐大家在实际的项目中使用,因为根据软件工程的思想不会影响整个工程的质量。
下面依次介绍(1)思想:采用setappdata, getappdata 在子GUI中传递数据,通过 varargout 将子GUI的参数传递给主GUI,uiwait(指定句柄), 通过uiresume(指定句柄)返回OutputFcn。
方法:1)主GUI中放一个Button,无参数调用子GUI,其CallBack如下function pushbutton1_Callback(hObject, eventdata, handles) mySettings = Gui2;set(handles.text1,'string',mySettings.weight)2)子GUI的figure的tag为figB,设置GUI子程序的OpeningFcn函数的结尾加上uiwait(handles.figB),这是因为在子GUI的OpenFcn中,如果不加uiwait,程序会直接运行到下面,执行OutputFcn。
GUI中不同界面的数据传递问题
同时在
在gui_1中OutputFcn输入以下语句
function varargout = gui_1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
在gui_2中的buttonCallback下输入
..................
function pushbutton1_Callback(hObject, eventdata, handles)
[data1,data2,data3,....]=gui_1;
.................
3、如果是多个变量需要传递,可以使用结构体的方式传递。例如:变量.a 变量.b 变量.c,取出时使用varargin{1},varargin{2},varargin{3}即可一一取出。
你的问题我今天刚刚解决,可能有点复杂哈,不过很好懂。
假设你有一个GUI叫gui_1,另一个叫gui_2,在gui_2中调用gui_1的参数或者结果,
利用figure的handle(句柄)来传递数据。具体的句法参考 guidata,get,set以及和handle有关的help。说具体点就是在关闭子界面前,把相关参数get到,然后用guidata和主界面的handle,把这些数据存到主界面handle里,然后在主界面“绘制曲线”的callback函数里再用guidata调用那些存好的数据来画图。
varargout{1}=h;
通过output里面的缺省变量varargout输出来。
在figA里面
就那样用
ret=figB;
GUI界面之间的参数传递方法
GUI界面之间的参数传递方法(1-3)今天,研究了一下不同GUI之间的参数传递方法,Matlab中GUI之间参数传递不如VC一样简单,易于理解,但是如果理解了,也是有章可循的,传说的具有六种方法,介绍其中的一种,如下所示:**运用gui本身的varain{}、varaout{}传递参数。
上面介绍的方法只是适用于主从GUI之间传递参数,即从主GUI调用子GUI,然后关掉子GUI,子GUI的参数就传递到了主GUI,比如子GUI的名称为subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2)在subGUI的m文件中(由GUIDE自动产生),varargin 和varargout 分别是一个可变长度的cell数组(MATLAB帮助文件中有说明)。
输入参数in1和in2保存在varargin中,输出参数out1,out2包含在varargout中;在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); 结束程序。
Matlab多窗口传值问题(GUI)
Matlab多窗口传值问题(GUI)1.直接传递当要在一个matlab中的.m文件打开一个新窗口时候,可以直接传递例如有两个窗口A.fig/A.m 和B.fig/B.m在A.m中B(var1) ; 即可传入参数那么在B中这样获取即可:if length(varargin)==1some_var= varargin{1};end2.通过output属传回在A.m中some_var=B(var1);也就是B还需要返回值。
那么在B中就需要设置handles的output值了function varargout = B_OutputFcn(hObject, eventdata, handles) varargout{1} = some_var_in_figure_B;3. 几个重要的函数1.getappdata(h,'Name'); 获取窗口句柄为h中的'Name'变量2.setappdata(h,'Name',value);设置窗口句柄为h中的'Name'变量为Value3.isappdata(h,'Name'); 判断h句柄下面有无‘Name’的变量4.rmappdata(h,'Name');删除h句柄下面‘Name’的变量5.guidata(h); 获取窗口句柄为h的handles结构6.guidata(h,handles); 设置窗口句柄为h的handles结构为handles7.guihandles(h) 生成handles结构说明:关于appdata的几个函数是最基本的,每个figure都可以有几个很多appdata,setappdata(0,'Name',value) 当设置句柄为0时,表示整个Matlab 共享的数据域,任何figure都可以访问。
这也可以成为数据传递的另一种方式。
