BWidget ScrollableFrame http://docs.activestate.com/activetcl/8.5/bwidget/ScrollableFrame.html
Example rewritten to use grid. use strict; use Tkx; Tkx::package_require("BWidget"); my $mw = Tkx::widget->new("."); my $sw = $mw->new_ScrolledWindow(); my $sf = $sw->new_ScrollableFrame(); $sw->setwidget($sf); #$sw->g_pack(-fill => "both", -expand => 1); $sw->g_grid(-sticky => "nsew"); # In Tk 8.4, you must use '0' instead of $sw below. Tk 8.5 will find # the row/col based on widget reference Tkx::grid(rowconfigure => $mw, $sw, -weight => 1); Tkx::grid(columnconfigure => $mw, $sw, -weight => 1); my $subf = Tkx::widget->new($sf->getframe()); my $b; for my $i (1..20) { for my $j (1..20) { $b = $subf->new_ttk__button(-text => "$i,$j", -command => sub {exit;}); $b->g_grid(-row => $i, -column => $j); } } Tkx::MainLoop; Enjoy, Jeff