#!/usr/bin/perl use strict; use warnings; use feature qw( state ); use Tk; my ( @bHits, @rHits ); my ( @bList, @rList ); state $turn = 0; my $mw = MainWindow->new( -title => 'Test Grid!' ); $mw->geometry( '1000x400+200+50' ); $mw->resizable( 0, 0 ); $mw->Label( -text => 'Test Grid', -foreground => 'black', )->pack( -side => 'top', -expand => '0', ); my $mw_switch_b = $mw->Button( -text => 'Switch', -command => \&toggleButtons, )->pack; my $mw_exit_b = $mw->Button( -text => 'Exit', -command => sub { exit } )->pack; my ( $blueFrame, $redFrame, $blHitFrame, $rdHitFrame ); $blueFrame = $mw->Frame; $redFrame = $mw->Frame; ### Blue Grid for my $row ( 0 .. 9 ) { for my $col ( 0 .. 9 ) {; $blueFrame->Button( -text => $col . $row, -background => 'light blue', -command => \&toggleButtons , )->grid( -row => $row, -column => $col ); } } ### Red Grid for my $row ( 0 .. 9 ) { for my $col ( 0 .. 9 ) { $redFrame->Button( -text => $col . $row, -background => 'gray', -command => \&toggleButtons, -state => 'disabled', )->grid( -row => $row, -column => $col ); } } $blueFrame->pack( -side => 'left', -padx => '10' ); $redFrame->pack( -side => 'right', -padx => '10' ); @bList = $blueFrame->gridSlaves(); @rList = $redFrame->gridSlaves(); MainLoop; sub toggleButtons { my $bg = 'light blue'; for my $list (\@bList, \@rList) { my ($state, $background) = 'disabled' eq $list->[0]->cget('-state') ? ('normal', $bg) : qw/disabled gray/; for my $button (@$list) { $button->configure(-state => $state, -background => $background); } $bg = 'indian red'; } }