24小时热门版块排行榜    

查看: 2508  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 311求调剂 +5 26研0 2026-03-15 5/250 2026-03-16 16:21 by a不易
[考研] 311求调剂 +6 冬十三 2026-03-15 6/300 2026-03-16 08:00 by wang_dand
[考研] 机械专硕调剂 +3 笨笨兔子 2026-03-12 3/150 2026-03-15 20:02 by 栗子粥?
[考研] 0856专硕279求调剂 +5 加油加油!? 2026-03-15 5/250 2026-03-15 11:58 by 2020015
[考研] 22408总分284求调剂 +3 InAspic 2026-03-13 3/150 2026-03-15 11:10 by zhq0425
[考研] 070305求调剂 +3 mlpqaz03 2026-03-14 4/200 2026-03-15 11:04 by peike
[考研] 265求调剂 +9 小木虫085600 2026-03-09 12/600 2026-03-14 01:11 by JourneyLucky
[考研] 26考研调剂 +3 ying123. 2026-03-10 3/150 2026-03-14 00:18 by JourneyLucky
[考研] 311求调剂 +5 牛乳糖的卡卡 2026-03-10 5/250 2026-03-14 00:05 by JourneyLucky
[考研] 311求调剂 +8 zchqwer 2026-03-10 8/400 2026-03-14 00:01 by JourneyLucky
[考研] 0703化学调剂 +4 快乐的香蕉 2026-03-11 4/200 2026-03-13 22:41 by JourneyLucky
[考研] 材料与化工求调剂一志愿 985 总分 295 +8 dream…… 2026-03-12 8/400 2026-03-13 22:17 by 星空星月
[考研] 0703化学一志愿211 总分320求调剂 +5 玛卡巴卡啊哈 2026-03-11 5/250 2026-03-13 21:40 by JourneyLucky
[考研] 315求调剂 +9 小羊小羊_ 2026-03-11 10/500 2026-03-13 21:13 by SXNU李老师
[考研] 材料工程调剂 +4 咪咪空空 2026-03-11 4/200 2026-03-13 19:57 by JourneyLucky
[考研] 0703化学求调剂 +7 绿豆芹菜汤 2026-03-12 7/350 2026-03-13 17:25 by njzyff
[考研] 307求调剂 +5 超级伊昂大王 2026-03-12 5/250 2026-03-13 15:56 by 棒棒球手
[考研] 295求调剂 +3 小匕仔汁 2026-03-12 3/150 2026-03-13 15:17 by vgtyfty
[考研] 08食品或轻工求调剂,本科发表3篇sci一区top论文,一志愿南师大食品科学与工程 +3 我是一个兵, 2026-03-10 3/150 2026-03-13 10:21 by Yuyi.
[考研] 收调剂 +7 调剂的考研学生 2026-03-10 7/350 2026-03-10 17:57 by 麦茶汤圆
信息提示
请填处理意见