笔者最近参加了一个小比赛,需要用MATLAB 写个软件,这里总结一下实现中止按钮时的一些心得体会。
实现方法是找的网上大牛提供的经验并结合自己的改进,这里就不一一列出链接,如果侵权,请联系笔者。
直接给出效果图:
当按下左侧的播放按钮,程序循环进行,并且左侧图标变为如下所示:
在程序循环进行时,点击右侧中止按钮,程序中断运行,且图标变回之前的播放按钮。
至于这里的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 版权协议,转载请附上原文出处链接和本声明。