请教一下各位,appdesigner界面如何保留上次设置的参数,按照网上的方法添加closerequest回调函数把里面的delete(app)屏蔽,然后添加set(gcf,'visible','off')之后运行界面关不掉,如何解决这个问题
可能是delete(app)语句被屏蔽了,而这个语句是关闭应用程序的关键。不过,你可以尝试使用其他方法来隐藏应用程序窗口,而不是使用set(gcf,'visible','off')。
一种常用的方法是使用应用程序对象的Visible属性来控制应用程序窗口的可见性。你可以将该属性设置为'off'来隐藏窗口,并在需要关闭应用程序时将其设置为'on'来显示窗口。
下面是一个示例代码,展示了如何在关闭请求时隐藏应用程序窗口,同时保留之前的设置参数:
function appdesigner_template
% 创建或加载应用程序对象
if ~isappdata(0, 'MyAppData')
% 初始化应用程序对象
app = appdesigner;
% 将应用程序对象存储到根应用程序数据中
setappdata(0, 'MyAppData', app);
else
% 从根应用程序数据中获取应用程序对象
app = getappdata(0, 'MyAppData');
% 恢复之前的设置参数
% ...
end
% 监听应用程序窗口的关闭请求
set(app.UIFigure, 'CloseRequestFcn', @closeApp);
% 显示应用程序窗口
set(app.UIFigure, 'Visible', 'on');
% 其他应用程序逻辑
% ...
end
% 关闭应用程序时的回调函数
function closeApp(src, event)
% 获取应用程序对象
app = getappdata(0, 'MyAppData');
% 保存设置参数
% ...
% 隐藏应用程序窗口
set(app.UIFigure, 'Visible', 'off');
% 阻止默认的关闭行为
%delete(app);
end
这个例子中,应用程序对象存储在根应用程序数据中,以便可以在关闭请求时使用。在关闭请求回调函数中,我们将应用程序窗口的可见性设置为'off',以隐藏窗口,并阻止了默认的关闭行为(delete(app)被注释掉)。通过这种方式,应用程序窗口会隐藏,但应用程序对象仍然保留在内存中,以便下次显示时可以恢复之前的设置参数。
请根据你的实际需求进行适当的修改。希望这对你有帮助!
UI之前,先设置传入参数,然后执行子GUI的OpenFcn,执行完子GUI后,通过OutputFcn返回参数,并在主GUI中接收。以下是示例代码:
% 主GUI中调用子GUI function button_callback(app, event) parameter = app.ParameterEditField.Value; subapp = SubApp('InputParameter', parameter); uiwait(subapp.UIFigure); parameter_out = subapp.output_parameter; app.OutputParameterEditField.Value = parameter_out;
% 子GUI中的OpenFcn function subapp_OpeningFcn(subapp, eventdata, handles, varargin) % 输入参数 handles.input_parameter = varargin{1}; % ... 界面设计 ... % 结束函数 guidata(subapp.UIFigure, handles); uiwait(subapp.UIFigure);
% 子GUI中的OK按钮回调函数 function ok_button_callback(hObject, eventdata, handles) % 处理结果并传出 handles.output_parameter = handles.ResultEditField.Value; guidata(hObject, handles); uiresume(handles.figure1); delete(hObject);
% 子GUI中的Cancel按钮回调函数 function cancel_button_callback(hObject, eventdata, handles) % 取消操作,传出空值 handles.output_parameter = []; guidata(hObject, handles); uiresume(handles.figure1); delete(hObject);
% 子GUI中的OutputFcn function varargout = subapp_OutputFcn(subapp, eventdata, handles) % 返回输出参数 varargout{1} = handles.output_parameter; delete(subapp.UIFigure);