0效果




1来由

首先我有个程序需要用到进度条,我首先试了一下MATLAB自带的进度条:

bar=waitbar(0,'读取数据中...');    % waitbar显示进度条
for i=1:1000A(i)=rand();str=['计算中...',num2str(100*i/1000),'%'];   % 显示的文本waitbar(i/1000,bar,str)
end


但是这样的进度条显得冷冰冰的,我就想研究以下其属性来想办法能否对其修饰,于是我进行了一波 open waitbar 发现这个函数就只是创建了figure和axes并不断更新图像:


其中更新图像主要依赖一个名为 uiwaitbar 的函数:


于是我想当然的试了一下 open uiwaitbar结果发现打不开。。。

于是我根据 waitbar.m 的位置顺藤摸瓜的在:toolbox\matlab\uitools\private
路径找到了 uiwaitbar.p 文件,啊加密文件,那没事了嗷:


虽然是加密文件,但我们还是通过换着参数调用发现这个函数可能需要用到一些png或者css文件:


所以说总结来说waitbar就只是一个不断刷新图像的figure而已,我们自己写的话甚至可以不用css或者png,直接用自带的画图函数都可以。

2函数用法

写了以下几个进度条函数(四种风格):

  • waitBar_SL1.m
  • waitBar_SL2.m
  • waitBar_SL3.m
  • waitBar_SL4.m

基本用法like this:

bar=waitBar_SL1(0,'loading ...');  % 初始化len=500;
for i=1:lenA(i)=rand(); % 这句一点用都没有,只是假装这是工程的一部分str=['progress - ',num2str(round(i/len*100)),'%']; % 显示的文本waitBar_SL1(bar,i/len,str);
end

3完整代码

waitBar_SL1.m


这一版暂不支持中文

function barHdl=waitBar_SL1(varargin)
% @author:slandarer
%
% try this Code:
% --------------------------
% bar=waitBar_SL1(0,'loading ...');  % 初始化
%
% len=1000;
% for i=1:len
%     A(i)=rand();
%     str=['progress - ',num2str(round(i/len*100)),'%']; % 显示的文本
%     waitBar_SL1(bar,i/len,str);
% end% 第一次调用先创建figure和axes
if ~strcmp(get(varargin{1},'type'),'figure')screenSize=get(0,'ScreenSize');width=screenSize(3)*0.24;height=screenSize(4)*0.12;pos=[screenSize(3)/2-width/2 screenSize(4)/2-height/2 width height];barHdl=figure();barHdl.Position=pos;barHdl.Resize='off';barHdl.Name='waitbar-slandarer-type1';barHdl.NumberTitle='off';barHdl.IntegerHandle='off';barHdl.MenuBar='none';barHdl.Interruptible='off';barHdl.DockControls='off';barAx=axes('Parent',barHdl);barAx.Position=[0 0 1,1];barAx.Color=[0.99 0.96 0.95];barAx.XColor='none';barAx.YColor='none';barAx.XLim=[0,105];barAx.YLim=[0,60];barAx.XGrid='on';barAx.YGrid='on';barAx.XTick=0:5:105;barAx.YTick=0:5:60;barAx.GridColor=[0.71 0.78 0.86];barAx.GridAlpha=0.3;barAx.LineWidth=1.2;hold(barAx,'on')rectangle(barAx,'Position',[0 0 105 38],'Curvature',0.3,'FaceColor',[0.4 0.5 1 .2],...'LineWidth',1.5,'EdgeColor',[0.16 0.15 0.65],'AlignVertexCenters','on')rectangle(barAx,'Position',[2.5 4 100 30],'Curvature',0.1,'FaceColor',[1 1 1 .8],...'LineWidth',1.5,'EdgeColor',[0.16 0.15 0.65],'AlignVertexCenters','on')barAx.UserData.Title=text(barAx,105/2,50,varargin{2},'horizontalAlignment','center',...'FontSize',14,'FontWeight','bold','FontName','Comic Sans MS','Color',[0.16 0.15 0.65]);barAx.UserData.RateHdl=plot(barAx,[],[],'Color',[0.16 0.15 0.65],'LineWidth',2,'Tag','rateHdl');drawnow
elsebarHdl=varargin{1};barAx=barHdl.Children;barAx.UserData.Title.String=varargin{3};rate=round(varargin{2}*100/5);if rate>0X=(1:rate).*5;Y=ones(1,rate);XSet=[X-2.5;X+2.5];YSet=[Y.*4.5;Y.*33.5];delete(findobj('Tag','rateHdl'));barAx.UserData.RateHdl=plot(barAx,XSet,YSet,'Color',[0.16 0.15 0.65],'LineWidth',2,'Tag','rateHdl');enddrawnow
endend

waitBar_SL2.m

function barHdl=waitBar_SL2(varargin)
% @author:slandarer
%
% try this Code:
% --------------------------
% bar=waitBar_SL2(0,'loading ...');  % 初始化
%
% len=1000;
% for i=1:len
%     A(i)=rand();
%     str=['progress - ',num2str(round(i/len*100)),'%']; % 显示的文本
%     waitBar_SL2(bar,i/len,str);
% endxyMin=[5,10];
xyMax=[95,25];
% 第一次调用先创建figure和axes
if ~strcmp(get(varargin{1},'type'),'figure')screenSize=get(0,'ScreenSize');width=screenSize(3)*0.24;height=screenSize(4)*0.12;pos=[screenSize(3)/2-width/2 screenSize(4)/2-height/2 width height];barHdl=figure();barHdl.Position=pos;barHdl.Resize='off';barHdl.Name='waitbar-slandarer-type2';barHdl.NumberTitle='off';barHdl.IntegerHandle='off';barHdl.MenuBar='none';barHdl.Interruptible='off';barHdl.DockControls='off';barAx=axes('Parent',barHdl);barAx.Position=[0 0 1,1];barAx.Color=[0.99 0.96 0.95];barAx.XColor='none';barAx.YColor='none';barAx.XLim=[0,100];barAx.YLim=[0,50];hold(barAx,'on')fill(barAx,[xyMin(1),xyMax(1),xyMax(1),xyMin(1)],...[xyMin(2),xyMin(2),xyMax(2),xyMax(2)],[0.85 0.4 0.13].*1.1);xSep1=5;xSep2=3;for i=1:9fill(barAx,[xyMin(1),xyMin(1)+xSep1,xyMin(1)+xSep1+xSep2,xyMin(1)+xSep2]+(i-1)*10.2,...[xyMin(2),xyMin(2),xyMax(2),xyMax(2)],[0.82 0.33 0.12],'EdgeColor','none')endbarAx.UserData.Title=text(barAx,5,37.5,varargin{2},'horizontalAlignment','left',...'FontSize',14,'FontWeight','bold','Color',[0.2 0.2 0.2]);barAx.UserData.RateHdl=fill(barAx,[xyMin(1),xyMax(1),xyMax(1),xyMin(1)],...[xyMin(2),xyMin(2),xyMax(2),xyMax(2)],...[0.99 0.96 0.95],'EdgeColor','none');plot(barAx,[xyMin(1),xyMin(1)]-0.8,[xyMin(2),xyMax(2)],'Color',[0.2,0.2,0.2],'LineWidth',3)plot(barAx,[xyMax(1),xyMax(1)]+0.8,[xyMin(2),xyMax(2)],'Color',[0.2,0.2,0.2],'LineWidth',3)plot(barAx,[xyMin(1),xyMax(1)],[xyMin(2),xyMin(2)]-1,'Color',[0.2,0.2,0.2],'LineWidth',3)plot(barAx,[xyMin(1),xyMax(1)],[xyMax(2),xyMax(2)]+1,'Color',[0.2,0.2,0.2],'LineWidth',3)drawnow
elsebarHdl=varargin{1};barAx=barHdl.Children;barAx.UserData.Title.String=varargin{3};rate=varargin{2};xMin=rate*(xyMax(1)-xyMin(1))+xyMin(1);barAx.UserData.RateHdl.XData=[xMin,xyMax(1),xyMax(1),xMin];drawnow
end

waitBar_SL3.m

function barHdl=waitBar_SL3(varargin)
% @author:slandarer
%
% try this Code:
% --------------------------
% bar=waitBar_SL3(0,'loading ...');  % 初始化
%
% len=1000;
% for i=1:len
%     A(i)=rand();
%     str=['progress - ',num2str(round(i/len*100)),'%']; % 显示的文本
%     waitBar_SL3(bar,i/len,str);
% endxyMin=[5,10];
xyMax=[95,25];
% 第一次调用先创建figure和axes
if ~strcmp(get(varargin{1},'type'),'figure')screenSize=get(0,'ScreenSize');width=screenSize(3)*0.24;height=screenSize(4)*0.12;pos=[screenSize(3)/2-width/2 screenSize(4)/2-height/2 width height];barHdl=figure();barHdl.Position=pos;barHdl.Resize='off';barHdl.Name='waitbar-slandarer-type3';barHdl.NumberTitle='off';barHdl.IntegerHandle='off';barHdl.MenuBar='none';barHdl.Interruptible='off';barHdl.DockControls='off';barAx=axes('Parent',barHdl);barAx.Position=[0 0 1,1];barAx.Color=[0.99 0.96 0.95];barAx.XColor='none';barAx.YColor='none';barAx.XLim=[0,100];barAx.YLim=[0,50];hold(barAx,'on')fill(barAx,[xyMin(1),xyMax(1),xyMax(1),xyMin(1)],...[xyMin(2),xyMin(2),xyMax(2),xyMax(2)],[0.4100 0.6200 0.15].*1.3);xSep1=5;xSep2=3;for i=1:9fill(barAx,[xyMin(1),xyMin(1)+xSep1,xyMin(1)+xSep1+xSep2,xyMin(1)+xSep2]+(i-1)*10.2,...[xyMin(2),xyMin(2),xyMax(2),xyMax(2)],[0.47 0.66 0.12],'EdgeColor','none')endbarAx.UserData.Title=text(barAx,5,37.5,varargin{2},'horizontalAlignment','left',...'FontSize',14,'FontWeight','bold','Color',[0.2 0.2 0.2]);barAx.UserData.RateHdl=fill(barAx,[xyMin(1),xyMax(1),xyMax(1),xyMin(1)],...[xyMin(2),xyMin(2),xyMax(2),xyMax(2)],...[0.99 0.96 0.95],'EdgeColor','none');plot(barAx,[xyMin(1),xyMin(1)]-0.8,[xyMin(2),xyMax(2)],'Color',[0.2,0.2,0.2],'LineWidth',3)plot(barAx,[xyMax(1),xyMax(1)]+0.8,[xyMin(2),xyMax(2)],'Color',[0.2,0.2,0.2],'LineWidth',3)plot(barAx,[xyMin(1),xyMax(1)],[xyMin(2),xyMin(2)]-1,'Color',[0.2,0.2,0.2],'LineWidth',3)plot(barAx,[xyMin(1),xyMax(1)],[xyMax(2),xyMax(2)]+1,'Color',[0.2,0.2,0.2],'LineWidth',3)drawnow
elsebarHdl=varargin{1};barAx=barHdl.Children;barAx.UserData.Title.String=varargin{3};rate=varargin{2};xMin=rate*(xyMax(1)-xyMin(1))+xyMin(1);barAx.UserData.RateHdl.XData=[xMin,xyMax(1),xyMax(1),xMin];drawnow
end

waitBar_SL4.m

function barHdl=waitBar_SL4(varargin)
% @author:slandarer
%
% try this Code:
% --------------------------
% bar=waitBar_SL4(0,'loading ...');  % 初始化
%
% len=1000;
% for i=1:len
%     A(i)=rand();
%     str=['progress - ',num2str(round(i/len*100)),'%']; % 显示的文本
%     waitBar_SL4(bar,i/len,str);
% end% 第一次调用先创建figure和axes
if ~strcmp(get(varargin{1},'type'),'figure')screenSize=get(0,'ScreenSize');width=screenSize(3)*0.18;height=screenSize(3)*0.18;pos=[screenSize(3)/2-width/2 screenSize(4)/2-height/2 width height];barHdl=figure();barHdl.Position=pos;barHdl.Resize='off';barHdl.Name='waitbar-type4';barHdl.NumberTitle='off';barHdl.IntegerHandle='off';barHdl.MenuBar='none';barHdl.Interruptible='off';barHdl.DockControls='off';barAx=axes('Parent',barHdl);barAx.Position=[0 0 1,1];barAx.Color=[1 1 1];barAx.XColor='none';barAx.YColor='none';barAx.XLim=[0,100];barAx.YLim=[0,100];hold(barAx,'on')t=linspace(0,-2*pi,pi/(pi/500))+pi/2;xSet=cos(t);ySet=sin(t);fill(barAx,[xSet.*35,xSet(end:-1:1).*45]+50,...[ySet.*35,ySet(end:-1:1).*45]+50,[1 1 1].*0.93,'EdgeColor','none');barAx.UserData.Title=text(barAx,50,50,varargin{2},'horizontalAlignment','center',...'FontSize',14,'FontWeight','bold','Color',[0.2 0.2 0.2]);barAx.UserData.RateHdl=fill(barAx,[0 0 0 0],...[0 0 0 0],...[0.53 0.81 0.93],'EdgeColor','none');drawnow
elsebarHdl=varargin{1};barAx=barHdl.Children;barAx.UserData.Title.String=varargin{3};rate=varargin{2}*2*pi;t=linspace(0,-rate,rate/(pi/500))+pi/2;xSet=cos(t);ySet=sin(t);barAx.UserData.RateHdl.XData=[xSet.*35,xSet(end:-1:1).*45]+50;barAx.UserData.RateHdl.YData=[ySet.*35,ySet(end:-1:1).*45]+50;drawnow
end

如何diy一款MATLAB进度条?相关推荐

  1. matlab 进度条/waitbar 显示运行进度

    当运行大程序,需要跑大量数据的时候,使用进度条可以看到程序究竟运行到什么地方了,哈哈,要不干等着难受(╯﹏╰)-- waitbar的作用是打开或者更新进度条. 1 语法结构 (1.1) h = wai ...

  2. matlab进度条的使用

    本文将介绍进度条的两种使用方法:基础用法和带取消按钮的进度条 一.waitbar进度条的基础用法 1.进度条的创建 进度条在创建的同时可进行相关配置,本文仅讲最简单的用法,对更多内容感兴趣的同学可参考 ...

  3. MATLAB 进度条

    前言 在通信仿真的时候,很多情况下数据量过大导致运行时间很长.为了方便跟踪进度,我们就需要进度条来将进程可视化. 一.基本原理 进度条的使用通常配合程序中的for循环来完成,每次循环中都更改一次进度数 ...

  4. 8款效果精美的 jQuery 加载动画和进度条插件

    加载动画和进度条在网站和 Web 应用中的使用非常流行.虽然网速越来越快,但是我们的网站越来越复杂,同时用户对网站的使用体验的要求也越来越高.在内容加载缓慢的时候,使用时尚的加载动画和进度条告诉用户还 ...

  5. php进度条插件,分享8款优秀的 jQuery 加载动画和进度条插件_jquery

    加载动画和进度条在网站和 Web 应用中的使用非常流行.虽然网速越来越快,但是我们的网站越来越复杂,同时用户对网站的使用体验的要求也越来越高.在内容加载缓慢的时候,使用时尚的加载动画和进度条告诉用户还 ...

  6. 9款极具创意的HTML5/CSS3进度条动画

    今天我们要分享9款极具创意的HTML5/CSS3进度条动画,这些进度条也许可以帮你增强用户交互和提高用户体验,喜欢的朋友就收藏了吧. 1.HTML5/CSS3图片加载进度条 可切换多主题 今天要分享的 ...

  7. 分享21个JS抽奖转盘特效,36个JS表单验证,31个JS进度条,总有一款适合您

    分享21个JS抽奖转盘特效,36个JS表单验证,31个JS进度条,总有一款适合您 下载链接:https://pan.baidu.com/s/1TWOGqes5J2baelO9qdItXg?pwd=ma ...

  8. 数字进度条组件NumberProgressBar

     数字进度条组件NumberProgressBar NumberProgressBar是一款数字进度条组件.它不仅可以通过进度条的变化展现进度,还可以通过跟随文字精确表示进度值.开发者可以对进度条进行 ...

  9. 超酷jQuery进度条加载动画集合

    在丰富多彩的网页世界中,进度条加载动画的形式非常多样,有利用gif图片实现的loading动画,也有利用jQuery和CSS3实现的进度加载动画,本文主要向大家介绍很多jQuery和CSS3实现的进度 ...

最新文章

  1. SQL_Case When 嵌套
  2. IntelliJ IDEA for Mac 如何创建普通的Java项目_创建项目_新建项目
  3. windows 下安装rabbitmq
  4. java instant获取微秒转成日期格式_Java8新特性时间日期库DateTime API及示例
  5. vba monthview控件64位_VBA学习
  6. 深入理解Flink ---- 系统内部消息传递的exactly once语义
  7. 我的世界高亮显示服务器,waila(我的世界高亮显示没了)
  8. PySide6将ui文件编译为py文件
  9. 小企业会计准则 ——主要账务处理和财务报表(1)
  10. 点歌机终端服务器停止服务怎么办,点歌机常见问题解析
  11. mysql connectors安装失败_pip install mysql-connector 安装出错
  12. graythresh
  13. 基因相关性(C语言)
  14. 电信客户流失分析实战
  15. Ubuntu零基础教学-GParted磁盘分区工具使用|超级详细,手把手教学
  16. 【方案开发】汽车充气枪打气泵方案
  17. 如何查看海思SDK的版本
  18. 爸妈,对不起,那不是我本意
  19. Kindeditor上传图片成功,但显示上传失败
  20. 吉他大师 安德列斯·塞戈维亚

热门文章

  1. 拓嘉启远:拼多多的奖惩机制有哪些
  2. 关于中标麒麟系统的经历
  3. 新型发明创造大赛计算机类,关于组织参加成都市第三十三届青少年科技创新大赛的通知...
  4. 如何自动生成推荐歌单:ACM论文翻译与解读 | Translation and Interpretation of ACM Survey
  5. 【算法java版11】:实现求s = a + aa + aaa + aaaa + aa...a 的值,其中a是一个数字,几个数相加由键盘控制
  6. python聚类wardhierachical_聚类之hierachical clustering算法
  7. 任意凸四边形内最大矩形
  8. 科学家量子计算机时间倒流,腾讯内容开放平台
  9. iBatis延迟加载
  10. 模糊数学——分解定理