Search code examples
matlabmatlab-figure

Matlab: add a dynamically updated progress bar in a GUI window


I am trying to add a dynamic progress bar in a GUI. I note there are some solutions available (How to add progress bar control to Matlab gui?). My method is based on creating two panels of different colors, one for background and the other for foreground (i.e., progress bar). My codes are as follows:

bar = uipanel('Parent',handles.bgProgressBar,'BackgroundColor','r');
%Note: bgPogressBar is the tag of a panel manually added with GUIDE
barPosition = get(bar,'Position');
cnt = 0
for ii = 1:S
   for jj = 1:T

       do something 
       ….

       cnt = cnt + 1;
       progress = cnt/(S*T);
       barPosition(3) = progress;
       barPosition;
       set(bar,'Position',barPosition);   
   end
end

The problem here is that the bar is not updated in real time. It does not repond but only progress to the end when the loop is completed. Is it possible to add a dynamically progressing bar in the GUI?


Solution

  • Use drawnow after set in order to update the graphic object on screen immediately:

    bar = uipanel('Parent',handles.bgProgressBar,'BackgroundColor','r');
    %Note: bgPogressBar is the tag of a panel manually added with GUIDE
    barPosition = get(bar,'Position');
    cnt = 0
    for ii = 1:S
       for jj = 1:T
    
           do something 
           ….
    
           cnt = cnt + 1;
           progress = cnt/(S*T);
           barPosition(3) = progress;
           barPosition;
           set(bar,'Position',barPosition);   
           drawnow %%%%%
       end
    end