The ProgressBar Widget

Using a ProgressBar is a great way to show the user something is still happening when you are doing lots of processing. Without it, the user wonders, “Is the application still running? Why isn’t it responding?” Figure 23-18 shows what a fairly typical progress bar looks like. This screenshot was generated with the following code:

use Tk;
use Tk::ProgressBar;

my $mw = MainWindow->new(-title => 'ProgressBar example');

$progress = $mw->ProgressBar(
        -width => 30,
        -from => 0,
        -to => 100,
        -blocks => 50,
        -colors => [0, 'green', 50, 'yellow' , 80, 'red'],
        -variable => \$percent_done
    )->pack(-fill => 'x');

$mw->Button(-text => 'Go!', -command=> sub {
   for ($i = 0; $i < 1000; $i++) { 
     $percent_done = $i/10;
     print "$i\n";
     $mw->update;  # otherwise we don't see how far we are.
  }
 })->pack(-side => 'bottom');

MainLoop;
A ProgressBar

Figure 23-18. A ProgressBar

The callback that is part of the Go button is just a quick way of showing how to do something and update the ProgressBar as part of the process. You could be loading a file, doing some number crunching, or anything else that seems to cause your program to pause.

ProgressBar Options

Here is a list of options available for ProgressBar:

-anchor => 'n' | 's' | 'e' | 'w'

Determines the starting point of the bar. For horizontal bars (such as our example), use 'e' or 'w'. Vertical bars use 's' or 'n'.

-blocks => number

The number of blocks ...

Get Mastering Perl/Tk now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.