24小时热门版块排行榜    

查看: 2507  |  回复: 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),可以删去)。
回复此楼
清泉居士
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 weigx 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 考研化学学硕调剂,一志愿985 +3 张vvvv 2026-03-15 4/200 2026-03-16 17:55 by 张vvvv
[考研] 0703一志愿211 285分求调剂 +5 ly3471z 2026-03-13 5/250 2026-03-16 16:16 by 哦哦123
[考研] 材料与化工专硕调剂 +3 heming3743 2026-03-16 3/150 2026-03-16 15:05 by peike
[考研] 304求调剂 +6 小熊joy 2026-03-14 6/300 2026-03-16 12:59 by Iveryant
[考研] 085601材料工程315分求调剂 +3 yang_0104 2026-03-15 3/150 2026-03-15 10:58 by peike
[考研] 288求调剂 +4 奇点0314 2026-03-14 4/200 2026-03-14 23:04 by JourneyLucky
[考研] 268求调剂 +5 一定有学上- 2026-03-14 6/300 2026-03-14 22:20 by 运气yunqi
[考研] 材料工程327求调剂 +3 xiaohe12w 2026-03-11 3/150 2026-03-14 20:20 by ms629
[考研] 复试调剂 +4 z1z2z3879 2026-03-14 5/250 2026-03-14 16:30 by JourneyLucky
[考研] 328,0703考生求调剂,一志愿为东北师范大学 +4 观素律 2026-03-09 5/250 2026-03-14 01:24 by JourneyLucky
[考研] 306求调剂 +4 唐薏薏 2026-03-09 4/200 2026-03-14 01:19 by JourneyLucky
[考研] 0856材料与化工309分求调剂 +6 ZyZy…… 2026-03-10 6/300 2026-03-14 00:38 by JourneyLucky
[考研] 271求调剂 +10 生如夏花… 2026-03-11 10/500 2026-03-14 00:35 by 卖报员小雨
[考研] 材料工程调剂 +9 咪咪空空 2026-03-12 9/450 2026-03-13 22:05 by 星空星月
[考研] 工科材料085601 279求调剂 +8 困于星晨 2026-03-12 10/500 2026-03-13 15:42 by ms629
[考研] 土木第一志愿276求调剂,科研和技能十分丰富,求新兴方向的导师收留 +3 土木小天才 2026-03-12 3/150 2026-03-13 15:01 by JourneyLucky
[考研] 085600材料与化工 309分请求调剂 +7 dtdxzxx 2026-03-12 8/400 2026-03-13 14:43 by jxchenghu
[考研] 070303一志愿西北大学学硕310找调剂 +3 d如愿上岸 2026-03-13 3/150 2026-03-13 10:43 by houyaoxu
[考研] 化工学硕306求调剂 +9 42838695 2026-03-12 9/450 2026-03-13 10:16 by houyaoxu
[考博] 26申博求助 +3 跳跃饼干 2026-03-10 4/200 2026-03-10 21:15 by Tntcnn
信息提示
请填处理意见