MATLAB 主GUI界面调用子GUI界面并输入输出参数,以及解决“字段不存在问题”

问题描述:需要在主GUI函数中调用子GUI界面,向子GUI传入参数parameter,参数在子GUI处理后传出,并传出变量flag,最后关闭子GUI界面。

子GUI界面如下:selfdefined_ISAR_Par.fig

1. 主GUI界面调用方法

[flagreture, parameter] = selfdefined_ISAR_Par(parameter);

输入参数:parameter

输出参数:flagreture,  parameter

调用方法和调用普通子函数形式一致

2. 子GUI界面处理

输入输出参数需要在子界面函数里面处理,才能被正确接收和传出。

每个GUI界面都有一个OpeningFcn函数,负责处理输入参数。

每个GUI界面都有一个OutputFcn函数,负责处理输出参数。

扫描二维码关注公众号,回复: 5920970 查看本文章

2.1 输入参数处理

在子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}。

2.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 这一行内容。

3. 关闭子GUI

在子界面输入参数完成后,需要点击确定退出该界面;或者不想输入参数,直接点击取消退出该界面。那么这个点击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);

4. 错误:引用了不存在的字段 '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.figure)

delete(handles.selfdefined_ISAR_Par) ——> delete(handles.figure)

猜你喜欢

转载自blog.csdn.net/long_xuan123/article/details/89352677