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

Re: Perl Tk Button Disabled

by GrandFather (Saint)
on Oct 24, 2022 at 20:40 UTC ( [id://11147650]=note: print w/replies, xml ) Need Help??


in reply to Perl Tk Button Disabled

Perhaps you want to condition setting the state of the button depending on sensor state?

sub four() { my $buttonState = sensorIsOn() ? "disabled" : "normal"; $Button1->configure(-state => $buttonState); $buttonState = ucfirst $buttonState; print "State $buttonState\n"; }

Update: Fixed typo (thanks AnomalousMonk)

Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond

Replies are listed 'Best First'.
Re^2: Perl Tk Button Disabled
by PilotinControl (Pilgrim) on Oct 25, 2022 at 00:14 UTC

    I think we are getting close. Below is the sensor code that sends data to the Perl script. The perl script changes the state and color of the button. However my other button code still changes the color of the button whether the sensor is tripped or not.

    if ($data =~ /(?<![\w-])ON(?![\w-])/i) { $btn1->configure(-background => "gray", -foreground => "black"); $btn1->configure(-state => "disabled"); print "ON\n"; } if ($data =~ /(?<![\w-])OFF(?![\w-])/i) { $btn1->configure(-background => "green", -foreground => "black"); $btn1->configure(-state => "normal"); print "OFF\n"; }

    And this code below still changes the color of $btn1 whether it is disabled or not. It's fine to change the color when it's enabled. It's NOT fine to change the color when it's disabled.

    sub chg_btn { $btn1->configure(-background => "green", -foreground => "black"); }

      So you should now have all almost the pieces you need to work out how to manage not changing button color in chg_btn when it ought not be changed. The missing part is passing the current sensor state into chg_btn in some fashion. Where you set up button call backs you can:

      my %context; ... $button->bind('<ButtonRelease-1>' => sub{chg_btn(\%context, @_});

      and something similar wherever you set up the sensor handling callback/sub. You can then

      sub sensorHandler { my ($context, ...) @_; $context->{sensorOn} = $data !~ /(?<![\w-])OFF(?![\w-])/i; ... }

      and in your button handler you can

      sub chg_btn { my ($context, ...) = @_; $btn1->configure(-background => "green", -foreground => "black") if !$context->{sensorOn}; }
      Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (4)
As of 2024-04-24 05:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found