MATLAB编写GUI小结——程序停止中断button按钮实现

  • Post author:
  • Post category:其他


笔者最近参加了一个小比赛,需要用MATLAB 写个软件,这里总结一下实现中止按钮时的一些心得体会。

实现方法是找的网上大牛提供的经验并结合自己的改进,这里就不一一列出链接,如果侵权,请联系笔者。

直接给出效果图:

当按下左侧的播放按钮,程序循环进行,并且左侧图标变为如下所示:

在程序循环进行时,点击右侧中止按钮,程序中断运行,且图标变回之前的播放按钮。

至于这里的button按钮为什么能实现这样的效果,有兴趣的同学可以参考笔者的另一篇博客:


MATLAB编写GUI小结——button按钮设置背景图片

这里直接给出左侧button按钮的 Callback 代码:

global flagPlay

% 更改图标
position = get(handles.playPauseButton,'Position');
I = imread('.\icon\pause-circle-fill.bmp');   %读取图片
I = imresize(I, [position(4)*2.86*5, position(3)*5]);
set(handles.playPauseButton,'CData',I);  %将按钮的背景图片设置成A,美化按钮
guidata(hObject, handles);

% 循环输入


for jj = 1:100
    pause(2.5 + rand(1) - 0.5); % 延时

    jj
    
    % 检测暂停
    if (flagPlay == 0)
        break;
    end
    drawnow()
    
end

% 更改图标
position = get(handles.playPauseButton,'Position');
I = imread('.\icon\play-circle-fill.bmp');   %读取图片
I = imresize(I, [position(4)*2.86*5, position(3)*5]);
set(handles.playPauseButton,'CData',I);  %将按钮的背景图片设置成A,美化按钮
guidata(hObject, handles);

flagPlay = 1;

直接给出右侧中止button按钮的 Callback 代码:

global flagPlay

flagPlay = 0;

可以看出,两者通过全局变量 flagPlay 进行中止功能的实现。

当然在最开始,flagPlay = 1,即GUI开头的OpeningFcn()函数下,已经声明全局变量 flagPlay = 1。

当点击左侧按钮,开始播放时,先将图标更改为播放中图标,再执行循环功能部分;

关键在于循环中的如下代码:

% 检测暂停
    if (flagPlay == 0)
        break;
    end
    drawnow()

这里的 drawnow() 使得该按钮下的函数能感知其他按钮对全局变量的更改,从而得以实现中止功能。

在得知中止按钮别按下后,先将图标更改为播放前图标,并令全局变量 flagPlay = 1。



版权声明:本文为long_xuan123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。