zoukankan      html  css  js  c++  java
  • 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]);

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

  • 相关阅读:
    Rust-数据类型
    Rust-智能指针
    Rust-使用包、Crate和模块管理不断增长的项目
    Rust-Slice类型
    Rust-引用与借用
    Rust 的核心功能-所有权(ownership)
    How to fix “sudo: command not found error”
    ABC195 F
    CF1501D Two chandeliers【拓展欧几里得+二分】
    CCA的小球【容斥定理】
  • 原文地址:https://www.cnblogs.com/shanchuan/p/8150270.html
Copyright © 2011-2022 走看看