Matlab的GUI参数传递方式
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都可以访问。
这也可以成为数据传递的另一种方式。
Matlab GUI 数据传递
GUI数据传递(需要一定matlab基础)主要分两类:GUI内部数据传递及GUI之间的传递,用appdata都可以实现,用法稍有不同。
内部:①在定义数据的Callback函数结尾,setappdata,句柄为figure的tag,句柄格式为handles.tag。
格式为:set(handles.tag,'Name',Value(或者就是变量名));②在使用数据的Callback函数开头,进行数据承接,getappdata,格式类似:格式为:Nargs = get(handles.tag,'Name’);外部:①在定义数据的figure函数的Openning函数体中,setappdata,句柄为‘0’,即屏幕的句柄格式为:set(0,'Name',Value(或者就是变量名));②在使用数据的figure函数的Callback函数开头,getappdata,句柄为‘0’。
格式为:Nargs = get(0,'Name’);之所以不在Openning函数中进行承接,是因为如果现在Openning中承接,Callback函数要用还得进行内部appdata传递,不能直接用。
直接在Callback承接能简便些,但是缺少条理性几个要点:①set(0,‘Name’,Value),其实质就是将变量存进屏幕的结构体中,级别高,因此效果相当于全局变量。
但是当从一个GUI中调用这些数据时,必须确保所用数据已经调进系统内存,也就是说,存在这样一种情况:当我们在系统重启后,马上开始运行一个GUI,这个GUI可能会出现数据不足的状况,就是因为其所调用的那些屏幕级的appdata没有被调进内存,它们在系统启动后还没被运行过。
怎么办呢?只能再增加几行程序特地把它们加进内存,在调用语句getappdata前,按如下语句将所需要的figure开启然后关闭:格式为:h=tag_of_figure;close(h);开启又关闭,看似没有用,但是经过一次启动,各个figure里面的setappdata 都能得到运行,把数据写到屏幕级内存中,作用非小。
Matlab中如何将(自定义)函数作为参数传递给另一个函数
Matlab中如何将(自定义)函数作为参数传递给另一个函数Matlab中如何将(自定义)函数作为参数传递给另一个函数假如我们编写了一个积分通用程序,想使它更具有通用性,那么可以把被积函数也作为一个参数。
在c/c++中,可以使用函数指针来实现上边的功能,在matlab中如何实现呢?使用函数句柄——这时类似于函数指针的一项功能。
假如我们现在已经编写了一个辛普森方法积分的函数如下,我们要把函数作为参数传给它(当然啦,matlab早已经提供给我们非常牛x 的积分函数了,这里只是个例子而已):function g=myintegrate(f,N,a,b)%integration using simpson methodn=N/2;h=(b-a)/N;x=a:h:b;fv=f(x);s=sum(fv(1:2:2*n-1))*4;s=s+sum(fv(2:2:2*n))*2;s=s+f(a)+f(b);s=s*h/3;g=s;现在要做的工作就是如何把上面的f函数换成我们想要的随便什么函数。
定义函数句柄:handle=@ functionname之后就可以把handle作为参数传递给上面的函数(或者其他需要使用函数作为参数的函数)了。
例如在0~pi/2上对sin(x)进行积分,可以如下输入:>>fh=@sin;>>myintegrate(fh,100,0,pi)ans =0.9947函数句柄可以指定为任意的matlab函数——当然也包括我们自定义的函数,比如我们在myfun.m文件中定义了如下函数:function f=myfun(x)f=x;那么,>>fh2=@myfun;>>myintegrate(fh2,100,0,1)ans =0.4967。
MATLABGUI数据传递总结
MATLABGUI数据传递总结在MATLAB GUI中,数据传递是指将数据从一个组件传递到另一个组件或从一个回调函数传递到另一个回调函数的过程。
数据传递在实际应用中非常常见,帮助实现用户界面与数据之间的交互和动态更新。
本文将总结MATLAB GUI中的数据传递方法,包括全局变量、handles结构体、UserData属性、公共数据区域、消息队列等技术。
1.全局变量:使用全局变量可以在GUI的所有回调函数中共享数据。
在GUI的函数中声明一个全局变量,并在回调函数中直接使用或修改这个全局变量。
在声明全局变量时需要加上“global”关键字,以告知Matlab该变量是全局变量。
优点:简单易用,无需额外的函数或配置。
缺点:可能造成命名冲突、数据不安全,不适合在多线程应用中使用。
2. handles结构体:在MATLAB GUI中,所有控件(如按钮,文本框)都有一个handles属性,该属性是一个结构体,包含了GUI中所有控件的句柄。
可以将数据存储在handles结构体的字段中,以实现数据的传递和共享。
在GUI的回调函数中,可以通过handles结构体的字段来读取和操作数据。
优点:方便灵活,可以在一个句柄结构中存储多个数据。
缺点:不适合存储大量的数据,可能导致处理的复杂性和性能问题。
3. UserData属性:每个MATLAB GUI对象都有一个UserData属性,可以用于存储自定义的数据。
可以将数据存储在UserData属性中,并在需要时通过get函数进行读取。
在回调函数中可以直接访问对象的UserData属性。
优点:简单易用,每个控件都有自己的UserData属性。
缺点:不适合存储大量的数据,可读性较差。
4.公共数据区域:使用MATLAB中一个.m文件作为公共数据区域,将数据保存在该文件中的全局变量中。
其他GUI回调函数可以通过该文件直接访问和修改全局变量。
优点:方便易用,数据共享简单。
缺点:容易造成命名冲突、数据不安全,不适合在多线程应用中使用。
MATLAB---函数结构与参数传递
关于nargin,nargout,varargin,varargout
nargin:输入参数的个数,主要用于两个方面:①判断输入参数的个数,如果输入参数个数不对,可以警告或其他处理;②根据参数个数的不同可以做不同的处理。如:
if nargin == 0
error;
elseif nargin == 1
cwit:
关于function_handle
function_handle在matlab环境下还是可以用的,但是不能支持编译,也就是说无法脱离matlab环境安全运行。在构建程序时,一定要考虑到扩展性,有些在某些条件下属于技术缺陷的方法,尽量不要用
====================================================================
cwit:
R14的Compiler 4,应该不叫编译吧。所以fcuntion_handle,eval这些问题不存在。
所以R14的路应该是另外一条道路,前面没有声明,我的理解主要是基于Matlab 6.1,这个版本的compiler比较好用。
if programmestarted==0
k=@aa;
save subfunction k
return
end
不过这样又增加了不少无谓的代码。
=======================================================================
function test_Uicontrol_Callback( h ) ;
handles = guidata( h ) ;
........................................
matlab学习GUI的基本操作
matlab学习GUI的基本操作在命令⾏窗⼝输⼊guide
单击确定后出现,可以选择控件来设计,然后可以保存
右击可以查看控件的所有属性
举⼀个简单的GUI实例---实现数据的传输添加可编辑⽂本框
更改字体⼤⼩,string默认的删掉
在按钮“数据传递”上右击,找到数据查看--->回调函数,然后保存,名为⽐如是GUI_01,然后会出现如下的.m编写
在这⾥⾯实现数据传递
%%点击按钮时,handles.edit1代表第⼀个⽂本框,⽤⼀个get函数得到edit1中的数据
str=get(handles.edit1,'String');
%%⽤set函数将得到的字符写到edit2中
set(handles.edit2,'String',str);
然后运⾏该程序,可以实现将左⽂本框的内容传递给右⽂本框。
matlab参数传递
matlab参数传递在MATLAB中,参数传递主要有两种方式:通过函数输入输出变量(input-output)和全局变量(global)。
通过函数输入输出变量这是最常用的一种参数传递方式。
在MATLAB中,函数可以接收输入参数(input arguments),然后生成输出参数(output arguments)。
这些参数需要在函数声明和定义中进行明确。
例如:matlabfunction [y] = myFunction(x)y = x^2; % 计算x的平方end在这个例子中,x是输入参数,y是输出参数。
调用这个函数时,需要将参数传递给x:matlabresult = myFunction(5); % result将被赋值为25 全局变量全局变量可以在MATLAB的任何地方访问,包括函数和脚本。
要使一个变量成为全局变量,你需要在函数或脚本的开始处使用global关键字声明它。
例如:matlabglobal x;function y = myFunction()x = 5; % 修改全局变量x的值y = x^2; % 计算x的平方end在这个例子中,x是一个全局变量,可以在任何函数或脚本中访问和修改。
注意,使用全局变量可以简化代码,但也可能导致代码更难理解和维护。
因此,通常只在确实需要时才使用全局变量。
以下是两个MATLAB中参数传递的例子:例子1:传递数组假设我们有一个数组A,我们想通过函数来修改这个数组。
我们可以将这个数组作为输入参数传递给函数: matlabA = [1, 2, 3]; % 定义一个数组Afunction modifyArray(inputArray)inputArray(2) = 0; % 将数组的第二个元素设置为0endmodifyArray(A); % 调用函数,修改数组A在这个例子中,我们将数组A作为输入参数传递给modifyArray函数,然后函数修改了数组的第二个元素。
matlab参数传递的方法
Parameterizing Functions一.实现参数传递的方法实现参数传递的方法有两个,分别是Parameterizing Using Nested Functions(嵌套函数法)和Parameterizing Using Anonymous Functions(匿名函数法)。
一.Parameterizing Using Nested Functions(嵌套函数法)1.简介:使用完全包含在程序文件中的另一个函数中的嵌套函数进行参数传递。
2.具体做法:首先,创建一个m文件(findzero.m),包含母函数findzero和嵌套函数poly:function y = findzero(b,c,x0)y = fzero(@poly,x0);function y = poly(x)y = x^3 + b*x + c;EndEnd然后,在Command Window里面调用函数:x = findzero(2,3.5,0)x =-1.09453.原理:嵌套函数定义了具有一个输入变量x的三次多项式,母函数findzero接受参数b和c输入值。
母函数findzero的嵌套函数poly可以共享母函数的workspace。
因此,参数b和c 的值由母函数传递给了嵌套函数。
4.举例说明:function y = findzero(b,c,x0)y = fzero(@poly,x0);function y = poly(x)y =3*x^7+x^2+b*x+c;endend>> x = findzero(1,2,0)x =-0.9399三.Parameterizing Using Anonymous Functions(匿名函数法)1.简介:使用匿名函数进行参数传递。
匿名函数是在单个命令中定义的函数,而需要不创建单独的程序文件,可以使用当前woekspace中可用的任何变量。
2.具体做法:首先,创建一个描述三次多项式的匿名函数的句柄,并找到零:b = 2;c = 3.5;cubicpoly = @(x) x^3 + b*x + c;x = fzero(cubicpoly,0)然后,在Command Window里面调用函数:x =-1.09453.原理:函数cubicpoly是具有一个输入值x的匿名函数的函数句柄,输入的匿名函数将在符号@后面的括号中显示。
Matlab的GUI参数传递方式
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); 结束程序。
matlab函数调用及数据传递(转载)
matlab函数调用及数据传递(转载)函数挪用在一个m文件中,可以界说多个函数,但是文件名必定要与第一个函数(主函数)一概,该文件中其他函数则为本文件的私有函数,外部不行访问(可以经历参数挪用的要领访问,下面会形容)。
比如在一个步骤中,创建一个fig后,会天生这样一个m文件:function varargout =febirdfun(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @febirdfun_OpeningFcn, ...'gui_OutputFcn', @febirdfun_OutputFcn, ...'gui_LayoutFcn', [], ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end剖析一下这个主函数:结果gui_State是一个机关,指定了figure打开和输出函数,开始gui_CallBack为空,倘使输入参数个数不为0,接下来将输入第一个参数通报给gui_State.callback。
接下来用交给gui_mainfcn函数治理,gui_mainfcn 按照gui_State和传入参数来确定是执子函数,仍旧打开fig 文件和运行OpeningFcn和OutputFcn。
MATLAB GUIDE程序设计参数在内部函数间及窗口间传递方式研究
MATLAB GUIDE程序设计参数在内部函数间及窗口间传递
方式研究
陈建;张胜良;李鑫
【期刊名称】《软件导刊》
【年(卷),期】2015(014)009
【摘要】MATLAB具有高效科学的计算功能、友好的用户界面及功能丰富的应用工具箱,在众多科学领域得到了广泛的应用。
MATLAB GUI具有学习起点低、易学易懂、开发周期短的优点,用户不必深入掌握面向对象的编程语言也能设计出精美的人机界面。
深入探讨了MATLAB GUIDE程序设计中参数在内部函数间及窗口间传递的不同方式,结合实例阐述了各方式原理,讨论了其优缺点、使用范围和使用方法,以方便MATLAB GUIDE程序设计者检索查看并对其熟练掌握。
【总页数】5页(P12-16)
【作者】陈建;张胜良;李鑫
【作者单位】浙江工业大学特种装备制造与先进加工技术教育部重点实验室浙江杭州310014
【正文语种】中文
【中图分类】TP301
【相关文献】
1.函数性质在原函数与其导函数间交互传递性讨论 [J], 潘杨友
2.函数性质在原函数与其导函数间交互传递性讨论 [J], 潘杨友
3.VS2005环境下多窗口程序中窗口间成员函数调用实例 [J], 丰立涛
4.MATLAB GUIDE程序设计参数在内部函数间及窗口间传递方式研究 [J], 陈建;张胜良;李鑫
5.水电厂与开关站间保护信息传递方式研究应用 [J], 肖闯; 李炜; 李能昌
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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的缺点,使一个对象能存取多个变量值。