| 查看: 2477 | 回复: 0 | ||||
weigx铜虫 (小有名气)
|
[交流]
matlab多个GUI中进行数据传递
|
|
在多个GUI中进行数据传递一直困扰了我很长时间,其实在Matlab2013版中,有非常详细的说明文档和例子。例子在matlab->GUI Building->Coding GUI Behavior下,有个例子Making Multiple GUIs Work Together可以帮助我们理解如何进行操作。下面我将其中最关键的部分总结了一下,和大家一块分享。 1、GUI窗口的图形句柄是figure1,调用格式为handles.figure1。 2、GUI控件的控件句柄有两种调用格式,一种是handles.Tag,其中Tag是该控件的句柄。第二种是在本控件的callback函数中,可以用hObject调用。如set(hObject,'string',...). 3、如果想要在GUI1中某个控件的回调函数中调用GUI2,并在GUI2中使用GUI1的数据。步骤是:(1)在GUI1该控件的回调函数中调用GUI2,调用格式为GUI2('GUI1',handles.figure1)。这样GUI2函数的输入参入varargin{}就有两个参数:一个是GUI1的名称(GUI1),第二个是GUI1窗口的句柄figure1。 varargin{}只在function GUI2_OpeningFcn(hObject, eventdata, handles, varargin)中传递给GUI2,所以在该函数中需要加一句: GuiInput = find(strcmp(varargin, 'GUI1')); handles.GUI1 = varargin{GuiInput+1}; %这样就在当前GUI2的handles结构中增加了一个指向GUI1的句柄,通过访问handles.GUI1就可以访问GUI1中的数据了。 为了防止窗口调用格式出现错误,可以加一个判断语句,如: if (isempty(GuiInput)) || (length(varargin) <= GuiInput) ... || (~ishandle(varargin{GuiInput+1})) dontOpen = true; else 执行正常语句; (如handles.GUI 1 = varargin{GuiInput+1};) end 在GUI2就利用handles.GUI1访问GUI1的控件和数据参数的格式为: main = handles.GUI1; % Obtain handles using GUIDATA with the caller's handle if(ishandle(main)) mainHandles = guidata(main); n1 = mainHandles.n1; %调用GUI1中的控件句柄n1 n2=mainHandles.n2; %调用GUI1中的控件句柄n2 end 4、 在交互过程中,用guidata()获得更新了的句柄结构 % Obtain handles using GUIDATA with the caller's handle mainHandles = guidata(handles.GUI1); 如:可以利用get(mainHandles.n1, 'String')访问GUI1中n1控件的属性。 例:set(handles.et1, 'String', get(mainHandles.n1, 'String')); 其中,et1是当前窗口GUI2的一个控件句柄。 在调用函数结束后,需要更新当前窗口的句柄结构 % Update handles structure guidata(hObject, handles); 5、在GUI2中的GUI2_OpeningFcn函数中,需要调用uiwait(hObject),这是延迟调用输出函数GUI2_outputFcn,直到调用uiresume(handles.figure1)。这样可以保证GUI有充足的时间得到返回值。 6、uiresume()一般是在需要关闭当前窗口的命令函数或关闭窗口按钮时调用。如利用一个'OK'按钮完成计算,就可以在OK_callback函数中加一句uiresume(handles.figure1);如果利用窗口关闭函数关闭程序,可以利用菜单项GUI->view->viewcallback-> GUI1_CloseRequestFcn(hObject, eventdata, handles)生成GUI1_CloseRequestFcn函数,在其中加一句uiresume(hObject);(一般在该函数中有一句delete(hObject),可以删去)。 |
» 收录本帖的淘帖专辑推荐
软件 |
» 猜你喜欢
求取一些关于纳米材料和纳米技术相关的英文PPT。
已经有0人回复
【复旦大学】二维材料方向招收2026年博士研究生1名
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有275人回复
北京纳米能源与系统研究所 王中林院士/曹南颖研究员课题组2026级硕/博/博后招生
已经有10人回复
荷兰Utrecht University超快太赫兹光谱王海教授课题招收2026 CSC博士生
已经有22人回复
反铁磁体中的磁性切换:两种不同的机制已成功可视化
已经有0人回复
26申博推荐:南京航空航天大学国际前沿科学研究院光学方向招收博士生!
已经有0人回复
求标准粉末衍射卡号 ICDD 01-076-1802
已经有0人回复
新西兰Robinson研究所招收全奖PhD
已经有0人回复

找到一些相关的精华帖子,希望有用哦~
K 均值聚类算法(K-means算法)MATLAB实现及说明文档
已经有262人回复
matlab小作业求点建议
已经有6人回复
奇怪:matlab为什么打不开部分.fig文件
已经有11人回复
关于matlab gui
已经有6人回复
matlab图形用户界面的设计-gui命令
已经有7人回复
用matlab制作的M文件保存在哪里才能直接调用?
已经有9人回复
matlab怎么导入数据
已经有8人回复
【求组】用matlab的fft求空间频谱
已经有8人回复
MATLAB GUI 求助
已经有3人回复
关于matlab GUI打包生产exe文件,并使其在没有安装matlab的计算机上运行的问题。。
已经有4人回复
Matlab中Gui编制的程序想脱离运行,但是CTF不见了。。。
已经有8人回复
MatlabGui里的popupmenu为什么在运行时不见了?
已经有5人回复
请教个最简单的BP神经网络matlab仿真
已经有9人回复
MATLAB GUI窗口一开始就高度最大化
已经有4人回复
matlab中GUI模块的AXES控件的应用
已经有1人回复
Matlab如何实现这样的计算:赋值——计算——判断结果——重复
已经有10人回复
继续求助Matlab绘图!
已经有8人回复
怎样用Matlab调用已有的C语言程序呢?
已经有3人回复
Matlab之gui设计-如何将计算结果写入文本框?
已经有6人回复
【求助】matlab 中,几个m文件调用
已经有14人回复
科研从小木虫开始,人人为我,我为人人












回复此楼

点击这里搜索更多相关资源