事情是这样的:
我想在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]);
这个就直接产生了一个矩形,用户不想要就不管它。虽然没有原模原样的把问题解决,但是不影响使用。