matlab 结束imrect的等待

事情是这样的:

我想在matlab gui中获取图中的一部分,于是用到了imrect,它的用法一般如下:

h = imrect; % 由用户用鼠标绘制矩形
% 继而进行更多的操作,例如获得选中区域的位置
loc = getPosition(h);
% 删除该区域
delete(h);
% ...

如果正常把流程走完是没有错的,正常的流程指的是,运行到h = imrect时,用户绘制了矩形,只有用户完成了矩形的绘制,程序才会继续执行后续代码。

所以,如果有时候我不想画矩形了呢?因为有的时候不需要。后续的代码就不能执行了。更糟糕的是,在设计的gui中,虽然imrect在等待用户的输入,但此时用户也可以继续点击别的按钮,做别的工作,所以imrect就一直在等待。可怕的是,如果我设计了一个按钮,这个按钮的功能就是用imrect获取一个区域,可是当我一连按了十几下按钮都不想绘制矩形区域会怎样?这时会有十几个imrect在等待用户绘矩形是吧?所以matlab就会卡住!就像死机了一样,关也关不掉。可以在命令行窗口狂按ctrl+c,结束imrect的等待。

这里有几个遇到相同问题的:

[已答复] 请问imrect,怎样不拖拽时让它结束?- ilovematlab

how to stop wait state of imroi - mathworks

How to not stop on imrect Matlab GUI? - stackoverflow

不知道他们最后是如何解决的。

这个问题困扰了我一会儿,看起来我要解决的问题是,如何在没有绘制矩形的情况下,当我按一个按钮执行下一个imrect的时候结束上一个imrect的等待呢?实在想不出办法,百度、google也找不到。后来一想,何不一开始就把矩形给出来,让用户去调整这个矩形呢?这样imrect就不会处于等待状态了!

是的,把代码稍微改一个就行了:

h = imrect(handles.axes1, [30 0 5 100]);

这个就直接产生了一个矩形,用户不想要就不管它。虽然没有原模原样的把问题解决,但是不影响使用。

原文地址:https://www.cnblogs.com/shanchuan/p/8150270.html