【问题标题】:How to break a loop when I close a figure in Matlab?当我在 Matlab 中关闭一个图形时如何打破循环?
【发布时间】:2015-07-05 09:21:05
【问题描述】:

close的事件被发送到一个图形时,我想通过图形属性的CloseRequestFcn属性捕获它,并想调用函数my_closereq()

h_100 = figure(100);

for k=1:100
    % some code here
    set(h_100,'CloseRequestFcn',@my_closereq)
    pause(.2);
end


function my_closereq(src,callbackdata)
%break;
disp('closed');
end

我想简单地 break 循环和 close 带有句柄 h_100 的图形?请指教,我该怎么办?

【问题讨论】:

  • 也许通过一个全局变量传递一个标志来打破循环?另外,如果你替换CloseRequestFcn,你必须自己closedelete这个数字。
  • 使用全局变量的好主意,它可能会起作用。但是怎么delete或者close这个图,我需要它的handler...?
  • @Naveh 由于你对全局变量的想法,我打破了轮子,现在如何关闭这个数字......我正在挖掘...... :)
  • 设置标志后,您必须在 my_closereq 函数中使用 delete(src) ...(或者,在循环后使用 delete(h_100)
  • 这就是我所做的:D

标签: matlab loops matlab-figure break


【解决方案1】:

没有全局的解决方案

h_100 = figure(100);
for k=1:100 
  % some code here 
  if ishandle ( h_100 ) == false
     break;
   end
  pause(.2); 
end
If ishandle ( h_100 )
  delete(h_100);
end

【讨论】:

  • 它成功了,而且更简单。谢谢你 。但是ishandle() 没有被使用。另外,在关闭的那一刻,我需要做更多的事情。所以其他解决方案适合我。谢谢你:upvote
【解决方案2】:

解决方案

感谢来自 @Naveh 和 @Hoki 的 cmets

h_100 = figure(100);
global isCloseCalled;
isCloseCalled = false;
set(h_100,'CloseRequestFcn',@my_closereq)

for k=1:100
    % some code here
    if isCloseCalled == true
         break;
    end
    pause(.2);
end
delete(h_100);

function my_closereq(src,callbackdata)
global isCloseCalled;
isCloseCalled = true;
disp('closed');
end

【讨论】:

  • 如果没有人提出更好的选择(投票按钮下方的绿色勾号),您可以“接受”您的答案。这样可以将问题标记为已解决,并且版主的工作量会减少。
猜你喜欢
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多