问题描述:需要在主GUI函数中调用子GUI界面,向子GUI传入参数parameter,参数在子GUI处理后传出,并传出变量flag,最后关闭子GUI界面。
子GUI界面如下:selfdefined_ISAR_Par.fig
[flagreture, parameter] = selfdefined_ISAR_Par(parameter);
输入参数:parameter
输出参数:flagreture, parameter
调用方法和调用普通子函数形式一致
输入输出参数需要在子界面函数里面处理,才能被正确接收和传出。
每个GUI界面都有一个OpeningFcn函数,负责处理输入参数。
每个GUI界面都有一个OutputFcn函数,负责处理输出参数。
在子GUI界面函数 function selfdefined_ISAR_Par_OpeningFcn(hObject, eventdata, handles, varargin)中加入
global parameter
parameter = varargin{1};
注意:selfdefined_ISAR_Par是子界面名称;global是为了让输入参数能在其他控件函数中使用;parameter = varargin{1}意为第一个输入参数赋给parameter,同理,若有第二个输入参数,则应加入parameter2 = varargin{2}。
在子GUI界面函数 function varargout = selfdefined_ISAR_Par_OutputFcn(hObject, eventdata, handles) 中加入
global flag parameter
varargout{1} = flag;
varargout{2} = parameter;
注意:在没有参数输出时,该函数的内容默认为 varargout{1} = handles.output,若要输出自定义参数,应屏蔽 varargout{1} = handles.output 这一行内容。
在子界面输入参数完成后,需要点击确定退出该界面;或者不想输入参数,直接点击取消退出该界面。那么这个点击button按钮关闭GUI的代码这么写呢?
在button按钮的函数中加入以下代码
uiresume(handles.selfdefined_ISAR_Par);
在子GUI界面函数 function varargout = selfdefined_ISAR_Par_OutputFcn(hObject, eventdata, handles) 的最后加入一行代码
delete(handles.selfdefined_ISAR_Par);加完代码如下所示
global flag parameter
varargout{1} = flag;
varargout{2} = parameter;
delete(handles.selfdefined_ISAR_Par);
关闭GUI的时候很有可能遇到错误提示:引用了不存在的字段 'selfdefined_ISAR_Par',就是自己的子界面GUI竟然找不到?
这是什么原因呢?
在子界面函数 function selfdefined_ISAR_Par_OpeningFcn(hObject, eventdata, handles, varargin) 中设个断点,在主GUI界面调用子GUI界面,运行至断点。打开工作区的 handles。
正常情况下,handles中第一个字段(第一行)应该是子界面的名称(selfdefined_ISAR_Par),但是上图中的第一行并不是子界面名称,而是 fugure1,具体为什么这里不是子界面名称,笔者并不是很清楚,应该和新建GUI的过程有关。
那如何解决这个问题呢?
解决办法:把提示引用了不存在的字段 'selfdefined_ISAR_Par'的地方,都换成 figure1 即可。主要需要换的有
uiresume(handles.selfdefined_ISAR_Par) ——> uiresume(handles.figure1)
delete(handles.selfdefined_ISAR_Par) ——> delete(handles.figure1)