我有一个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
我感谢任何帮助。
答案 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,循环停止循环。