pashanoid has asked for the wisdom of the Perl Monks concerning the following question:

How do you pass a value to $hour and $minute in the simple 12 clock example at cpan's Tk::Gauge module? I'm only able to get the gauge/dial to show, but not the needles.

#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Trace; use Tk::Gauge; my $mw = MainWindow->new; $mw->geometry("500x600"); #pretty fancy background for the gauge $mw->title("Hello World!!!"); #I'm learning... my($hour, $minute); $hour = 3; $minute = 45; my $clock = $mw->Gauge( -extent => -359.9, # 360 loses outline -from => 0, -huboutline => 'black', -majortickinterval => 5, -majorticklabelscale => 12.0 / 60.0, -majorticklabelskip => [ 0 ], -minortickinterval => 1, -needles => [ { -radius => 100, -variable => \$minute, }, { -radius => 60, -variable => \$hour, }, ] , -start => 90, -to => 60, )->pack; $hour = 3; $minute = 45; $hour = 4; $minute = 5; #nothing happening ... sad MainLoop;

Ok, I read about the thermo example here http://perlmonks.org/index.pl?node_id=472852 and this solves my issue:

$mw->after( 1000, sub{ $hour = 3 } ); $mw->after( 1000, sub{ $minute = 30 } );
Putting these lines of code just above MainLoop will draw the clock hands/needles

Ok, since I got this far... how do I make the minutes needle to move? I know I'm asking too much, but please help :)

Replies are listed 'Best First'.
Re: Using Tk::Gauge
by zentara (Cardinal) on May 24, 2011 at 15:12 UTC
    Ok, since I got this far... how do I make the minutes needle to move? I know I'm asking too much, but please help :)

    Well, I didn't run your code, but the lines

    $mw->after( 1000, sub{ $hour = 3 } ); $mw->after( 1000, sub{ $minute = 30 } );
    hold the minute hand at 30.

    Try something like this:

    my $minute = 30; $mw->update; $mw->after( 1000, sub{ $minute++; } );
    If you look in the Tk::Gauge module's example script directory, you will find "clock"
    #!/usr/bin/perl package Tk; use Tk::Trace; package main; use Tk; use Tk::Gauge; use strict; use warnings; my $mw = MainWindow->new; my( $hour, $minute ) = (12,12); my $clock = $mw->Gauge( -extent => -359.9, # 360 loses outline -from => 0, -huboutline => 'black', -majortickinterval => 5, -majorticklabelscale => 12.0 / 60.0, -majorticklabelskip => [ 0 ], -minortickinterval => 1, -needles => [ { -radius => 100, -variable => \$minute, }, { -radius => 60, -variable => \$hour, }, ] , -start => 90, -to => 60, )->pack; $mw->repeat(200 => sub {$hour = 1.2 * 5; $minute = 12; } ); MainLoop;

    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku ................... flash japh
      It worked! Thank you so much!