#!/usr/bin/perl use Tk; my $mw = MainWindow->new; $mw->bind( "" => sub { print "reconfigure ".ref($_[0])."\n" } ); my $topFr = $mw->Frame ->pack( -fill => "both", -expand => 1 ); $topFr->Button( -text => "bigger", -command => sub { changeSize(50) } ) ->pack( -side => "bottom", -expand => 1 ); $topFr->Button( -text => "smaller", -command => sub { changeSize(-50) } ) ->pack( -side => "bottom", -expand => 1 ); my $interior = $topFr->Frame( -label => "Hello world", -height => 100, -width => 100, -background => "white", -relief => "groove" ) ->pack( -side => "bottom", -fill => "both", -expand => 1 ); $interior->packPropagate(0); MainLoop; sub changeSize { my ($sizeDelta) = @_; $interior->configure( -width => $interior->width+$sizeDelta, -height => $interior->height+$sizeDelta ); printf("interior %d x %d, topFr %d x %d\n", $interior->width, $interior->height, $topFr->width, $topFr->height ); } #### #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = new MainWindow; my $current_size = $mw->reqwidth . "x" . $mw->reqheight; my $old_current_size = $current_size; $mw->bind( '', sub{ &OnResize }); my $leave = 0; $mw->bind( '',sub { $leave = 1; } ); $mw->bind( '',sub { $leave = 0; &OnResize; } ); MainLoop; sub OnResize { my $current_size = $mw->width . "x" . $mw->height; if( $leave == 1) {return } if($old_current_size eq $current_size){return} ## Resize has occurred do something: printf( "Resize happened - old size: %s, new size: %s\n", $old_current_size, $current_size ); ## set the old size to the new size $old_current_size = $current_size; }