24小时热门版块排行榜    

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

智能机器人

Robot (super robot)

我们都爱小木虫

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

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 weigx 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见