use Tk; require Tk::BrowseEntry; $numWidgets = 1; my (@packdirs) = (); my (@anchordirs) = (); my (@fill) = (); my (@expand) = (); $mw = MainWindow->new(-title => "This is the title"); $f = $mw->Frame(-borderwidth => 1, -relief => 'groove') ->pack(-side => 'top', -fill => 'x'); $top = $mw->Toplevel(-title => "output window"); my $addbutton = $f->Button(-text => "Add Widget", -command => \&addwidget )->pack(-anchor => 'center'); foreach (0..$numWidgets) { my $b = $top->Button(-text => $_ . ": $packdirs[$_]")->pack; my %pinfo = $b->packInfo; $b->packForget; &addwidget($_); } MainLoop; sub repack { @w = $top->packSlaves; foreach (@w) { $_->packForget; } my $e = 0; foreach (@w) { $_->configure(-text => "$e: $packdirs[$e]"); $_->pack(-side => $packdirs[$e], -fill => $fill[$e], -expand => $expand[$e], -anchor => $anchordirs[$e]); $e++; } } sub addwidget { my ($count) = @_; if (! defined $count) { $numWidgets ++; $count = $numWidgets ; } $packdirs[$count] = 'top'; $anchordirs[$count] = 'center'; $fill[$count] = 'none'; $expand[$count] = 0; my $f1 = $f->Frame->pack(-side => 'top', -expand => 1, -fill =>'y', -before => $addbutton); $f1->BrowseEntry(-label => "-fill", -choices => [qw/none x y both/], -variable => \$fill[$count], -browsecmd => \&repack) ->pack(-ipady => 5, -side => 'left'); $top->Button(-text => $count . ": $packdirs[$count]", -font => "Courier 20 bold")->pack(-side => $packdirs[$count], -fill => $fill[$count], -expand => $expand[$count]); }