#!/usr/bin/perl -w use Tk; use strict; require "color_model"; my ( $main, $coord, $count, $color_offset, $text_offset, $i, ); $coord = [ [0,0], [0,1], [0,2], [0,3], [0,4], [0,5], [0,6], [1,6], [2,6], [2,5], [2,4], [3,4], [4,4], [4,5], [4,6], [5,6], [6,6], [6,5], [6,4], [6,3], [6,2], [6,1], [6,0], [5,0], [4,0], [4,1], [4,2], [3,2], [2,2], [2,1], [2,0], [1,0], ]; $count = $#$coord + 1; $main = MainWindow->new(); for ($i=0; $i<$count; ++$i) { $main->{"box$i"} = $main->Label(-width=>1); $main->{"box$i"}->grid(-row=>$coord->[$i][0], -column=>$coord->[$i][1]); } $color_offset = $text_offset = 0; RotateText(); RotateColor(); MainLoop(); #================================================================= sub RotateText { my ($msg) = "TK: the most portable GUI tool!"; for (my $i=0; $i<$count; ++$i) { $main->{"box$i"}->configure(-text=>substr($msg, ($i+$text_offset)%$count, 1)); } $main->after(300, \&RotateText); # $main->idletasks(); $text_offset = ($text_offset + 1) % $count; } sub RotateColor { for (my $i=0; $i<$count; ++$i) { $main->{"box$i"}->configure(-bg=>sprintf("#%02x%02x%02x", HSBtoRGB(($i+$color_offset) % $count / $count, 1, 255))); } $main->after(260, \&RotateColor); # $main->idletasks(); $color_offset = ($color_offset - 1) % $count; }