#!/usr/bin/perl use strict; use Tk; use Tk::ProgressBar; #dosn't leak my $mw=MainWindow->new; $mw->geometry('+100+100'); my $tframe = $mw->Frame->pack(); my $pro_on = 0; my $count = 0; my $label = $tframe->Label( -text => 'Show Progress', )->pack(-side => 'left', -padx => 5); my $cb = $tframe->Checkbutton( -activebackground => "white", -variable => \$pro_on, -command => [ \&display_pro ] )->pack(-side => 'left'); my $bframe = $mw->Frame->pack(); my $pb = $bframe->ProgressBar( -height => 0, -width => 20, -length => 100, -colors=>[0,'blue'], -blocks=>100, -variable => \$count, )->pack(); # need to pack then unpack them to get right window size my @w = $bframe->packSlaves; foreach (@w) { $_->packForget; } MainLoop; sub display_pro { print $pro_on,"\n"; if($pro_on){ $count = 0; $bframe->pack(); $pb->pack(); # $mw->packPropagate; # $mw->update; show_progress(); }else{ my @w = $bframe->packSlaves; foreach (@w) { $_->packForget; } $bframe->packForget; } } sub show_progress{ my $timer; $timer = $mw->repeat(100,sub{ $count++; $pb->value($count); $mw->update; if($count == 100){$timer->cancel} }); } __END__