应用程序设计(GUI)中的进度条

149次浏览(过去30天)
维罗妮卡人告诉
维罗妮卡人告诉 于2021年2月19日
评论: 亚当丹斯 2011年5月7日
这就跟你问声好!
我需要创造一个 进度条 就像带有应用程序设计的以下酒吧一样:
%按钮推动功能:ProcessDataButton
函数processDatabuttonpushed(应用程序,事件)
%将按钮名称更改为“Processing”
app.ProcessDataButton.Text =“处理……”;
%将文本放在图标顶部
app.processdatabutton.Iconalignment =.'底部';
%创建与按钮相同颜色的waitbar
wbar =排列(repmat (app.ProcessDataButton.BackgroundColor 15 1200),(1、3、2));
黑色边框周围的waitbar
WBAR([1,结束],:,:) = 0;
wbar(:,[1,结束],:) = 0;
%将空的waintbar加载到按钮
app.ProcessDataButton.Icon = wbar;
%循环并更新waitbar
n = 10;
i = 1: n
%更新图像数据(royalblue)
CurrentProg = min(圆形((大小(wbar,2)-2)*(I / n)),大小(wbar,2)-2);
app.processdatabutton.icon(2:结束-1,2:currentprog + 1,1)= 0.25391;
app.ProcessDataButton。Icon(2:end-1, 2:currentProg+ 1,2) = 0.41016;
app.processdatabutton.icon(2:结束-1,2:currentprog + 1,3)= 0.87891;
%暂停,减慢动画
暂停(3)
结束
%去除waitbar
app.ProcessDataButton.Icon =;
%更改按钮名称
app.ProcessDataButton.Text ='处理数据';
结束
在调用我的功能后,我需要进度条更新,因此我将其更改为类似的东西:
%按钮推动功能:ProcessDataButton
函数processDatabuttonpushed(应用程序,事件)
%将按钮名称更改为“Processing”
app.ProcessDataButton.Text =“处理……”;
%将文本放在图标顶部
app.processdatabutton.Iconalignment =.'底部';
%创建与按钮相同颜色的waitbar
wbar =排列(repmat (app.ProcessDataButton.BackgroundColor 15 1200),(1、3、2));
黑色边框周围的waitbar
WBAR([1,结束],:,:) = 0;
wbar(:,[1,结束],:) = 0;
%将空的waintbar加载到按钮
app.ProcessDataButton.Icon = wbar;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%循环并更新waitbar
my_function(做事......
<活动?>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%去除waitbar
app.ProcessDataButton.Icon =;
%更改按钮名称
app.ProcessDataButton.Text ='处理数据';
结束
我的问题: 我不知道如何跟踪我的更新 。我需要创建一个活动吗?我跟着本指南: 定义自定义事件数据- MATLAB & Simulink - MathW万博1manbetxorks Italia 但是,我没有设法解决我的问题:我需要在函数结束前追踪我的进步之前的中间输出(希望解释自己,我的技术语言在这个领域很差)。我的路径还好吗?
你有建议吗?谢谢
5点评论
亚当丹斯
亚当丹斯 2011年5月7日
@GT UIPROGRESTBAR. 它并没有嵌入到按钮中,其他情况和这个是一样的。

登录评论。

接受的答案

亚当丹斯
亚当丹斯 于2021年2月19日
编辑:亚当丹斯 于2021年2月19日
步骤0:设置app按钮
将按钮添加到您的应用程序并添加一个 Buttonpushed. 回调函数。重要的是,按钮的高度必须扩展,为进度条提供足够的空间。
第1步:将按钮句柄发送到外部功能
从内部调用外部功能 Buttonpushed. 回调函数并将按钮句柄传递给伪进度栏作为外部功能的输入。我称之为 pseudo-progress-bar 因为它不是典型的 waitbar 或者 uiprogressdlg
app.ProcessDataButton 是按钮手柄。
函数processDatabuttonpushed(应用程序,事件)
myfunction(___,app.processdatabutton)
结束
此外,在外部功能内定义附加输入。
函数myfunction(___,processdatabuttonhandle)
步骤2:在外部函数中设置进度条
显然,这需要在更新进度条的循环之前设置。此代码块中的一些与原始示例不同。多亏了 onCleanup 在下面的最后一行中,按钮将在循环后返回其原始状态,或者如果出错过早地结束该功能。
%存储原始按钮文本
originalButtonText = processDataButtonHandle.Text;
%函数结束时,返回原始按钮状态
cleanup = oncleanup(@()set(processdatabuttonhandle,'文本'originalButtonText,'图标'));
%将按钮名称更改为“Processing”
processdatabuttonhandle.text =.“处理……”;
%将文本放在图标顶部
processDatabuttonHandle.Iconalignment =.'底部';
%创建与按钮相同颜色的waitbar
wbar =排列(repmat (processDataButtonHandle.BackgroundColor 15 1200),(1、3、2));
黑色边框周围的waitbar
WBAR([1,结束],:,:) = 0;
wbar(:,[1,结束],:) = 0;
%将空的waintbar加载到按钮
processdatabuttonhandle.icon = wbar;
步骤3:在循环中更新进度条
将代码放在循环开头或结尾的for-循环中,具体取决于您是否希望在循环进程之前或之后更新进度栏。此示例更新循环末尾的进度条。
本节使用变量:
  • n -迭代次数
  • 一世- 循环变量
n = = 10;
i = 1: n
%%%%%%%%%%%%%
你的循环在这里
%%%%%%%%%%%%%
更新进度条
CurrentProg = min(圆形((大小(wbar,2)-2)*(I / n)),大小(wbar,2)-2);
processDataButtonHandle。Icon(2:end-1, 2:currentProg+ 1,1) = 0.25391;%(宝蓝色)
ProcessDatabuttonHandle.Con(2:结束-1,2:CurrentProg + 1,2)= 0.41016;
processDataButtonHandle。drawicon (2:end-1, 2:currentProg+ 1,3) = 0.87891;
%暂停使动画变慢(可选)
%暂停(3)
结束
要清除psuo -progress栏并使按钮恢复正常,您有两个选项
  • 什么也不做。当外部功能完成后,该栏将被清除,按钮将恢复正常。
  • Exectue清除('清理')在循环中的任何点在相同的函数之后返回按钮状态。
4评论
亚当丹斯
亚当丹斯 2021年2月23日
我懂了。它会帮助了解你的循环是什么。触发进度更新的活动是什么?它是变量的变化吗?图形更新?该应用程序是否可以访问该事件?

登录评论。

更多的答案(0)

社区寻宝

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!

翻译的