Beefy Boxes and Bandwidth Generously Provided by pair Networks Frank
good chemistry is complicated,
and a little bit messy -LW

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


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 } } ); }


Comment on Re: TK Timed action
Select or Download Code

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://995570]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
As of 2014-03-17 00:07 GMT
Find Nodes?
    Voting Booth?

    Have you used a cryptocurrency?

    Results (336 votes), past polls