0

「親」と「子」の 2 つのウィンドウがあります。「親」GUI の閉じるボタンを押して、ウィンドウ「親」と「子」の両方を閉じたいと思います。

私のコールバック関数は次のとおりです。

function close(hObject, eventdata)
    close all;
end

「図」オブジェクトの私のコードは次のとおりです。

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

私の2番目のオプションは同じです:

function close(hObject, eventdata)
    close(hParentFigure);
    close(hChildFigure);
end

エラーが発生する理由を知りたいですか?

注: 各 GUI は異なるファイルにプログラムされています。GUIDE は使用していません。

4

2 に答える 2

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 

おそらく何が起こっているかというと、 を呼び出すと、その関数はカスタムの Figureclose allを呼び出そうとします。Figure はまだ閉じていないため、が実行されると、同じ Figure を再度削除しようとします。deletedeletefcndeletefcnclose all

于 2013-07-22T18:15:50.917 に答える