Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

disable button

by honyok (Sexton)
on Feb 05, 2009 at 06:14 UTC ( [id://741496]=perlquestion: print w/replies, xml ) Need Help??

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

Evenin'. How do I disable a Perl/Tk button during a callback?
my $push=$tab->Button(-text => "$tab ",-command=>\&run,-command =>[\&s +ave_parms,$tab])->pack; sub run { #disable $push #do something #enable $push }
-honyok

Replies are listed 'Best First'.
Re: disable button
by GrandFather (Saint) on Feb 05, 2009 at 06:51 UTC

    Unless you have a message pump in run there is no need to disable/enable the button. If you don't know what a message pump is very likely you don't have one.

    If you still think you need to disable the button show us a complete sample app that demonstrates the issue you are having because disabling the button most likely is not the fix to your actual problem.


    Perl's payment curve coincides with its learning curve.
Re: disable button
by zentara (Archbishop) on Feb 05, 2009 at 14:06 UTC
    It usually is more complex than this, as to when you want the normal state returned, but here are the commands.
    sub run { #disable $push $button->configure(-state=>'disabled'); #do something #enable $push $button->configure(-state=>'normal'); }

    I'm not really a human, but I play one on earth Remember How Lucky You Are
      I've tried this, but I'm not sure how to pass $push to the subroutine; specifically in the same statement in which it is being defined. I'm new to local variable usage. -honyok
        Yeah, it can get tricky. One option is to create the button first, without a command, then after creation, configure it to contain a command, with it's name as a parameter. However, it is probably easiest to use the caller method. This will restore the button after 2 seconds.
        #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = tkinit; my $push= $mw->Button(-text => "test ", -command =>[\&save_parms,$mw,'somedata'] )->pack(); MainLoop; sub save_parms { print "@_\n"; my $caller = $Tk::widget; #disable $push $caller->configure(-state=>'disabled'); #do something my $timer = $mw->after(2000,sub{ $caller->configure(-state=>'normal'); #enable $push }); }

        I'm not really a human, but I play one on earth Remember How Lucky You Are

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://741496]
Approved by GrandFather
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (8)
As of 2024-04-25 11:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found