in reply to Re: Adding a Skin to a Tk widget
in thread Adding a Skin to a Tk widget

It looks to me like your Tk version is a little old. What do you get if you run:

perl -MTk -e "print $Tk::VERSION"

If you have something lower than 804.027, you should consider upgrading.

To handle changing the backgound colors of your script without needing to specify each widget, pass a pointer to the top level widget and recursively iterate over its children. Something like this. (replace the sub butone in your example script with these two subs.)

sub butone { my $color = $diswindow->chooseColor( -initialcolor => $colour, -title => 'Choose color' ); if ($color) { $colour = $color; my ( $r, $g, $b ) = $colour =~ /\w{2}/g; for ( $r, $g, $b ) { $_ = hex $_; } my $foreground = ( $r + $g + $b < 400 ) ? '#ffffff' : '#000000 +'; change_colors( $diswindow, $colour, $foreground ); } } sub change_colors { my ( $widget, $color, $fg ) = @_; $widget->configure( -bg => $color ); { no warnings 'uninitialized'; eval( $widget->configure( -foreground => $fg ) ); } if ( my @children = $widget->children ) { change_colors( $_, $color, $fg ) for @children; } }

Note that this also adjusts the foreground color to compensate for too dark or too light backgrounds.

Replies are listed 'Best First'.
Re^3: Adding a Skin to a Tk widget
by Anonymous Monk on Nov 29, 2005 at 13:33 UTC
    Thanks very much thundergnat... I have 800.024 for your perl -MTk -e "print $Tk::VERSION" command... Your script too is working, I can colour the window from the chooseColor thingy, and all are coloured. I'll have to take some time to get my head around it though. O... just to say the first time the window pops up it is still not all coloured but after the selection from the chooseColor thingy things are fine... No need to reply again... Thanks much...