How to indicate if the program is processing in app designer?

My program sometimes takes 10-20 seconds to run. The problem is that I don't have any way to see if the program is processing or it just hit a bug.
Is there a way in app designer to let the user know that the program is running after the they've pushed the button?
function CalculateButtonPushed(app, event)
x=app.XEditField.Value;
y=app.YEditField.Value;
z=app.ZEditField.Value;
I=app.CurrentAEditField.Value;
[Bx,By,Bz] = Magnetic_field_solenoid_cartesian1(app,x,y,z,I);
app.BxmGsEditField.Value=Bx;
app.BymGsEditField.Value=By;
app.BzmGsEditField.Value=Bz;
end

댓글 수: 1

Put some text on the GUI? I created a BusyCursor class that I use in regular figure and GUIDE apps. No idea if it works with AppDesigner as I haven't tried, but essentially all it does is change the cursor to the Windows busy cursor.
In other situations I use a progress bar (one from the File Exchange, but the builtin waitbar works too).
and in other cases I simply put a small place on my GUI for info text and change it to 'Processing...' and then to 'Done' or something similar once processing completes.

댓글을 달려면 로그인하십시오.

답변 (1개)

Mohammad Sami
Mohammad Sami 2020년 1월 31일

0 개 추천

Use the function dlg = uiprogressdlg(app.UIFigure); See documentation for all available options with the function.

댓글 수: 6

This doesn't really suit my need. I don't want a "progress bar". I just need an indicator with two states: "calculating" and "done" and preferably it's implemented in the GUI instead of a pop up screen.
Just implement it then! What is causing the problem?
function CalculateButtonPushed(app, event)
% app.ProcessIndicator is a text area
app.ProcessIndicator.Value='Processing...';
x=app.XEditField.Value;
y=app.YEditField.Value;
z=app.ZEditField.Value;
I=app.CurrentAEditField.Value;
[Bx,By,Bz] = Magnetic_field_solenoid_cartesian1(app,x,y,z,I);
app.BxmGsEditField.Value=Bx;
app.BymGsEditField.Value=By;
app.BzmGsEditField.Value=Bz;
Bt=sqrt(Bx^2+By^2+Bz^2);
app.BtotalmGsEditField.Value=Bt;
app.ProcessIndicator.Value='Done!';
end
I tried this but it only shows the "Done!".
Try putting a
drawnow
or
pause( 0.1 )
instruction after
app.ProcessIndicator.Value='Processing...';
Worked flawlessly!! Thanks.
How to indicate if the process end

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Develop Apps Using App Designer에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by