use strict; use warnings; use Tk; use Tk::Pane; my $mw = MainWindow->new; my($create_fields_num)=5; my($paned_win) = $mw->Panedwindow(-showhandle => 1); $paned_win->pack(-side => 'top', -expand => 1, -fill => 'both'); my($l_pane) = $paned_win->Scrolled('Pane', -scrollbars => 'osoe', -sticky => 'new' )->pack(-side => 'top', -anchor => 'nw', -expand => 1, -fill => 'both'); my($lab_entry) = $l_pane->LabEntry( -label => "Enter Num:", -labelPack => [-side => 'left', -anchor => 'w'], -textvariable => \$create_fields_num )->pack(-side => 'top', -anchor => 'n', -fill => 'x'); $l_pane->Button( -text => 'Create Fields', -command => [\&create_fields, $l_pane, $paned_win, \$create_fields_num] )->pack(-side => 'top', -anchor => 'n', -fill => 'x'); my($r_pane) = $paned_win->Scrolled('Pane', -scrollbars => 'osoe', -sticky => 'new' )->pack(-side => 'top', -anchor => 'nw', -expand => 1, -fill => 'both'); $paned_win->add($l_pane, $r_pane); MainLoop; sub create_fields{ my($l_pane, $paned_win, $fields) = @_; my($sub_frame) = $l_pane->Frame; foreach(@{$sub_frame->configure}){ print join(" ", @{$_}, "\n"); } for(my $field_num=0; $field_num < $$fields; $field_num++){ $l_pane->Entry()->pack(-side => 'left'); } # Move the sash to accommodate the new fields $mw->after(30, sub{ my($xscrollbar, $yscrollbar, $bar_width, $bar_visible); foreach(@{$l_pane->children()}){ if($_->name eq 'scrollbar'){ $xscrollbar = $_; } if($_->name eq 'ysbslice'){ $yscrollbar = $_; } } if($xscrollbar->ismapped){ my($bar_width) = $xscrollbar->width; my($xscrollbar_height)= $xscrollbar->height; my($yscrollbar_width) = $yscrollbar->width; my(undef, $visible_fraction) = $l_pane->xview; my($x, $y) = $paned_win->sash(coord => 0); my($width) = ($bar_width/$visible_fraction)+$xscrollbar_height; if($yscrollbar->ismapped){ $width = $width+$yscrollbar_width; } if($xscrollbar->ismapped){ $paned_win->sash( place => 0, $width , $y); } } }); }