Matlab在无限循环中完成

时间:2017-03-29 12:14:45

标签: matlab user-interface radio-button infinite-loop

我有一个Matlab用户界面,我希望用户在选择单选按钮后立即使用imrect 输入多个区域。
不知道将选择多少个区域,因此选择需要处于无限循环中 一旦选择了另一个单选按钮,imrect输入应该停止,这是我无法开始工作的。

这是一个最小的工作示例:

function mwe
ax = axes('Position', [0 0 1 1]);
bg = uibuttongroup('Position',[0 0 .15 1], 'SelectionChangedFcn',{@bselection, ax});
r1 = uicontrol(bg, 'Style','radiobutton', 'String','Option 1', 'Position',[10 250 100 30]);
r2 = uicontrol(bg, 'Style','radiobutton', 'String','Option 2', 'Position',[10 225 100 30], 'Value',1);

function bselection(source, event, ax)
  switch event.NewValue.String
    case 'Option 1'
      while true
        h = imrect(ax);
        % do stuff
        delete(h);
      end
    case 'Option 2'
      % do not show imrect and do other stuff
  end

我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以在按钮上设置Interruptible property。您也可以将BusyAction设置为cancel。帮助说:

  

中断发生在MATLAB处理的下一个点   队列,例如当有drawow,uifigure,getframe,waitfor时,   或暂停命令。

因此,如果您包含“暂停”,则在选择下一个矩形之前可能不会停止。这是因为一旦你打电话给imrect,它可能不知道它必须停止。

但是,如果imrect阻止matlab UI触发回调,则此方法可能无效。

一个更好的方法是来使用无限循环。您需要通过检查 -

告诉它何时结束
running = true;
while running
  h=imrect(ax)
  % do stuff
  delete(h)
  if (SOMETHING)
      running = false
  end
end

什么是SOMETHING?我们需要检查按钮是否已被取消选择。

您可以使用

if r1.Value!=1
  running = false
end

哪个会检查是否未选择r1,如果是,则运行变为false,循环停止循环。