#!/Perl/bin/perl use strict; use warnings; use Data::Dumper; use Tk; use Tk::ProgressBar; # Settings: my $status_var = 100; my $blks = 10; my $dir = 'w'; my $res = 0; my $fromv = 0; my $tov = 100; my %timer = (); # Behälter für alle Timer my $mw = Tk::MainWindow->new(-width=>100,-height=>80,); $mw->packPropagate(0); my $pb = $mw->ProgressBar( -borderwidth => 2, -relief => 'sunken', -width => 20, -padx => 2, -pady => 2, -variable => \$status_var, -value => 0, -colors => [0 => 'green', 50 => 'yellow' , 80 => 'red'], -resolution => $res, -blocks => $blks, -anchor => $dir, -from => $fromv, -to => $tov )->pack(); # $blks = abs($blks - ($res * 2)); # $res = abs(5 - $res); print "sv: '$status_var'\n"; my $b = $mw->Button( -text => 'start / stop', -command=> sub{ startstop($pb, $status_var, $fromv, $tov, \%timer) }, )->pack(); MainLoop; sub startstop { my ($pb, $status_var, $fromv, $tov, $timer) = @_; if( exists $timer{counter} ){ $timer{counter}->cancel; delete $timer{counter}; }else{ $timer{counter} = $pb->repeat(500, sub{ setUpPb($status_var, $fromv, $tov) }, ); } } # /startstop sub setUpPb { my ($status_var, $fromv, $tov) = @_; if( $status_var < $tov ){ $status_var++; }else{ $status_var = $fromv; } } # /setUpPb