我有两个窗口'父母'和'孩子'。我想按下'父'GUI中的关闭按钮,关闭两个窗口'父母'和'孩子'。
我的回调函数是下一个:
function close(hObject, eventdata)
close all;
end
'figure'对象的代码是:
set(hMainFigure, 'deletefcn', @close);
两个窗口都关闭了,但我收到了下一个错误:
Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.
Error in main/close
Error using delete
Error while evaluating figure DeleteFcn
我的第二个选项是相同的:
function close(hObject, eventdata)
close(hParentFigure);
close(hChildFigure);
end
我想知道错误被触发的原因?
注意:每个GUI都在不同的文件上编程。我没有使用GUIDE。
答案 0 :(得分:3)
可以使用
重现此问题f = figure;
set(f, 'deletefcn', @(src, evt)close('all'))
close all
但是,在2013a中,您会收到更多信息
Warning: A callback recursively calls CLOSE. Use DELETE to prevent this message.
> In /Applications/MATLAB_R2013a.app/toolbox/matlab/graphics/close.p>request_close_helper at 167
In /Applications/MATLAB_R2013a.app/toolbox/matlab/graphics/close.p>request_close at 253
In /Applications/MATLAB_R2013a.app/toolbox/matlab/graphics/close.p>close at 124
In @(src,evt)close('all')
In closereq at 18
In /Applications/MATLAB_R2013a.app/toolbox/matlab/graphics/close.p>request_close at 256
In /Applications/MATLAB_R2013a.app/toolbox/matlab/graphics/close.p>close at 124
可能发生的事情是,当您致电close all
时,该功能会尝试使用自定义delete
调用图上的deletefcn
。由于该数字尚未结束,执行deletefcn
时close all
会再次尝试删除相同的数字,依此类推。
答案 1 :(得分:3)
按下“父”图上的关闭按钮后,它已经关闭。无需再次关闭它。在第二个实现中,(没有“全部关闭”的实现),请尝试删除close(hParentFigure);
行。
正如@Huguenot已经指出的那样,这个递归限制是由窗口关闭活动重新触发窗口关闭活动触发的。
错误详细错误消息中建议使用更强大的建议。只需使用delete
代替。这是一些演示代码:
deleteAllFigures = @(~, ~) delete(findobj(0,'type','figure'));
for ix = 1:4
h = figure;
set(h,'DeleteFcn',deleteAllFigures);
end
%Now press the close box on any of the figures.