我可以用菜单或x按钮关闭我的主gui
function menuProgramQuit_Callback(hObject, eventdata, handles)
close(handles.figure1);
但同时可以打开子gui对话框
function pushbuttonCalibrationConfigure_Callback(hObject, eventdata, handles)
calibrationOutput = uiConfigureCalibration('uiMain', handles.figure1);
waitfor(calibrationOutput);
guidata(handles.output,handles);
如果主要人物关闭,则子gui不会,并且当他subgui(此处)时它会崩溃
uiConfigureCalibration
)已关闭,因为主gui的数字句柄无效。
那么在关闭主gui之前,如何在matlab中关闭所有子guis?
编辑: 我更改了代码,以便被调用的对话框将其句柄保存到主对话框的句柄
function uiConfigureCalibration_OpeningFcn(hObject, eventdata, handles, varargin)
% Choose default command line output for uiConfigureCalibration
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% save handle of calling gui
mainGuiHandleIndex = find(strcmp(varargin, 'uiMain'));
if ~isempty(mainGuiHandleIndex)
handles.mainHandle = varargin{mainGuiHandleIndex+1};
handlesMain = guidata(handles.mainHandle);
handlesMain.('openfigures').('calibration') = handles.figure1;
guidata(handles.mainHandle, handlesMain);
guidata(handles.figure1, handles);
end
在主gui的关闭功能中,我无法检查图形是否在主图形关闭之前打开并关闭它
if isfieldRecursive(handles, 'handles.openfigures.calibration')
close(handles.openfigures.calibration);
end
close(handles.figure1);
然而,这并没有改变。子对话框图仅在主对话框关闭后关闭,整个代码再次崩溃。
为什么没有用close命令关闭子对话框的图形?
答案 0 :(得分:1)
您可以使用CloseRequestFcn
figure
属性执行此操作。
这将允许您拦截删除数字的请求,然后根据需要处理这些请求。
这是一个简单的函数,演示了如何使用CloseRequestFcn
来实现上面描述的行为:
function figTest()
f1 = figure('UserData', 1, 'Position', [100 500 50 50]);
f2 = figure('UserData', 2, 'Position', [200 500 50 50]);
set(f1,'CloseRequestFcn', @preCloseMain);
function preCloseMain(src, e)
% Delete f2, in try-block incase it was already closed
try
fprintf('Closing non-main figures!\n');
close(f2);
end
fprintf('Closing main figure!\n');
delete(src);
end
end
答案 1 :(得分:0)
我遇到了同样的问题,我想在打开主窗口时关闭所有现有的GUI窗口。
我写了一个.m
函数:
function closeAll()
clear all, close all, fclose('all'), clc, warning('off','MATLAB:xlswrite:AddSheet'); % close all opened items and clear Matlab workspace
end
并在GUI OpeningFcn或任何需要的地方调用此函数。
答案 2 :(得分:0)
我有一个类似的问题,我的gui会产生其他guis,即选项gui和log gui。在我的主应用程序中,我有类似的东西。
setappdata
这些函数会创建数字并返回句柄。句柄可以保存在gui句柄中,也可以保存在getappdata
和if (isgraphics(logFH))
close(logFH);
delete(logFH);
end
中。后来当我关闭主要功能时。
{{1}}