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 |