my $h = manage_font([ $mw, $font_family, $font_size ]); #### # Create a font 1 point smaller than $font_size my $h = manage_font([ $mw, $font_family, $font_size ], "-1"); #### manage_font($h, "+7") # Increase font size by 7 points #### use strict; use warnings; use Tk; use Tk::Font; use Data::Dumper; my $font_family = "tahoma"; my $font_size = "24"; my $mw = new MainWindow(); my $h_font = manage_font([ $mw, $font_family, $font_size ]); my $b1 = $mw->Button(-text => "Decrease Font Size (-)", -bg => 'lightgreen'); my $b2 = $mw->Button(-text => "Increase Font Size (+)", -bg => 'lightgreen'); $b1->pack($b2); $b1->configure(-font => $h_font->{'font'}); $b2->configure(-font => $h_font->{'font'}); $b1->configure(-command => sub { manage_font($h_font, "-1") }); $b2->configure(-command => sub { manage_font($h_font, "+1") }); my $h_font1 = manage_font([ $mw, $font_family, $font_size ], "-8"); my $h_font2 = manage_font([ $mw, $font_family, $font_size ], "-4"); my $h_font3 = manage_font([ $mw, $font_family, $font_size ], "+0"); my $h_font4 = manage_font([ $mw, $font_family, $font_size ], "+4"); my $h_font5 = manage_font([ $mw, $font_family, $font_size ], "+8"); my $l1 = $mw->Label(-text => "Tiny font", -bg => 'cyan', -relief => 'ridge'); my $l2 = $mw->Label(-text => "Small font", -bg => 'cyan', -relief => 'ridge'); my $l3 = $mw->Label(-text => "Medium font", -bg => 'cyan', -relief => 'ridge'); my $l4 = $mw->Label(-text => "Large font", -bg => 'cyan', -relief => 'ridge'); my $l5 = $mw->Label(-text => "Huge font", -bg => 'cyan', -relief => 'ridge'); $l1->pack($l2, $l3, $l4, $l5); $l1->configure(-font => $h_font1->{'font'}); $l2->configure(-font => $h_font2->{'font'}); $l3->configure(-font => $h_font3->{'font'}); $l4->configure(-font => $h_font4->{'font'}); $l5->configure(-font => $h_font5->{'font'}); $mw->bind("" => sub { exit }); $mw->bind("" => sub { $b1->invoke }); $mw->bind("" => sub { $b2->invoke }); MainLoop; sub manage_font { my ($details, $modify) = @_; my $h_font = { }; if (ref $details eq "ARRAY") { # Create a new font my ($w, $family, $size) = @$details; $h_font->{'family'} = $family; $h_font->{'size'} = $size; $h_font->{'font'} = $w->Font(-family => $family, -size => $size); } elsif (ref $details eq "HASH") { # Modify the existing font $h_font = $details; } if (($modify || 0) and $modify =~ /^[-+]\d+$/) { my $new_size = $h_font->{'size'} + $modify; if ($new_size > 0 and $new_size < 100) { $h_font->{'font'}->configure(-size => $new_size); $h_font->{'size'} = $new_size; } } return $h_font; }