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 commentaire

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.

Connectez-vous pour commenter.

Réponses (1)

Mohammad Sami
Mohammad Sami le 31 Jan 2020
Use the function dlg = uiprogressdlg(app.UIFigure); See documentation for all available options with the function.

6 commentaires

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur App Building dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by