Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: How to pass parameter to a subroutine?

by AnomalousMonk (Archbishop)
on Mar 03, 2020 at 00:53 UTC ( [id://11113679]=note: print w/replies, xml ) Need Help??


in reply to How to pass parameter to a subroutine?

An approach very similar to stevieb's solution except:

  • An array is used instead of a hash for button widget storage;
  • The  i, j info is encapsulated in a callback and not stored in the widget array (and thus is not accessible other than through the ToggleBox() function - it's effectively immutable);
  • Uses callbacks (see Tk::callbacks).
use strict; use warnings; use Tk; my @frames; my $mw = MainWindow->new( -bg=> '#606060', -borderwidth=> 0); my $size = 40; my $y = 0; my $x = 0; my $h = 3*$size; for my $j (0 .. 15) { my $x = 0; my $w = 3*$size; for my $i (0 .. 15) { $frames[$i][$j] = $mw->Button( -text => ' ', -bg => "#60C8BC", + -fg => "#000000", -borderwidth => 1, -anchor => 'w', ); $frames[$i][$j]->bind('<Button-1>' => [ '::ToggleBox', $i, $j +] ); # bind to callback $frames[$i][$j]->place( -y=>$y, -x=>$x, -width=>$w, -height=>$ +h ); $x = $x + $w; $w = $size; $x = $x+2 if ($i % 5 == 0); } $y = $y + $h; $h = $size; $y = $y+2 if ($j % 5 == 0); } MainLoop; exit; sub ToggleBox { my $self = shift; my ($jj, $ii) = @_; print "$jj, $ii\n"; }


Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (6)
As of 2024-04-23 08:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found