Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re: TK Timed action

by zentara (Archbishop)
on Sep 25, 2012 at 15:30 UTC ( #995570=note: print w/replies, xml ) Need Help??

in reply to TK Timed action

I don't really have a good grasp as to how to efficiently force the program to check every x seconds?
It turns out that $mw->after(1000, \&sub); works.. then just add that into the sub to repeat..

Hi, Tk::after is usually used for a one-shot delay. What you want is Tk::repeat. Try

my $repeater = $mw->repeat(1000, \&sub); .... $repeater->cancel; # when you want to stop it
and you will not need to repeatedly call Tk::after in your sub.

Here is a basic example:

#!/usr/bin/perl use Tk; use warnings; use strict; my $mw = MainWindow->new(title => "Timer"); my $elapsed_sec = 0; my $elapsed_sec_label = $mw->Label(-textvariable => \$elapsed_sec)->pa +ck(); my $repeater; # declare first so it can be accessed in the callback $mw->Button(-text => "reset", -command => sub { $elapsed_sec = 0; &repeater(); })->pack(); $mw->Button(-text => "exit", -command => sub { exit })->pack(); # start first run &repeater(); MainLoop; sub repeater{ #this is repeated every second, and you can put your is_playing here $repeater = $mw->repeat(1000 => sub { $elapsed_sec ++; if ($elapsed_sec > 4){ $repeater->cancel } } ); }

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://995570]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2018-02-24 10:35 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (310 votes). Check out past polls.