24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 2522  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求调剂 +4 熊二想上岸 2026-04-06 4/200 2026-04-06 17:17 by dongzh2009
[考研] 生物学学硕求调剂:351分一志愿南京师范大学生物学专业 +5 …~、王…~ 2026-04-06 6/300 2026-04-06 16:12 by dooble
[考研] 生物学求调剂 +5 15064154688 2026-04-03 5/250 2026-04-06 11:56 by lijunpoly
[考研] 301求调剂 +7 细胞相关蛋白 2026-04-03 7/350 2026-04-06 11:47 by lijunpoly
[考研] 297分083200求助 +8 aekx 2026-04-05 8/400 2026-04-06 10:35 by imissbao
[考研] 316求调剂 +5 yyx想调剂 2026-04-05 5/250 2026-04-05 22:22 by 咔咔咔咔9
[考研] 312求调剂 +3 Say Never 2026-04-04 3/150 2026-04-05 11:19 by guoweigw
[考研] 调剂 +8 熊二想上岸 2026-04-04 8/400 2026-04-05 05:27 by houyaoxu
[考研] 材料调剂 +11 一样YWY 2026-04-02 13/650 2026-04-04 23:10 by 无际的草原
[考研] 331求调剂 +3 niby 2026-04-02 3/150 2026-04-04 19:56 by 蓝云思雨
[考研] 342求调剂 +3 Liang7111 2026-04-04 5/250 2026-04-04 19:47 by dongzh2009
[考研] 考研调剂 +5 小sun要好运 2026-04-03 5/250 2026-04-03 21:43 by 啵啵啵0119
[考研] 一志愿华中农业071010,总分320求调剂 +7 困困困困坤坤 2026-04-02 7/350 2026-04-03 17:26 by Yuena_Wang
[考研] 专硕 351 086100 也是考的材科基 本科也是材料 +8 202451007219 2026-04-02 8/400 2026-04-03 09:50 by 蓝云思雨
[考研] 338求调剂,一志愿能源动力,外语是日语203 +5 zzz,,r 2026-04-02 5/250 2026-04-03 09:45 by 蓝云思雨
[考研] 312求调剂 +6 小小墨123 2026-04-02 7/350 2026-04-03 07:32 by jsw79
[考研] 362求调剂 +14 西南交材料专硕3 2026-03-31 14/700 2026-04-02 17:50 by yunlongyang
[考研] 一志愿上海海洋大学083200食品学硕,求调剂,接受其他专业 +6 what张 2026-04-01 7/350 2026-04-02 16:48 by zzsw+
[考研] 调剂 +3 好好读书。 2026-04-01 6/300 2026-04-02 15:49 by liumengping
[考研] 求调剂 +4 DADA怪 2026-03-31 4/200 2026-04-01 14:30 by ZXlzxl0425
信息提示
请填处理意见