Embedding Widgets

One of the best things you can do with a Text widget is put other widgets (such as Button or Entry widgets) inside it. One advantage of embedding widgets is you can create a scrolled set of widgets on a line-by-line basis.

Before we go over all the different functions available to work with embedded widgets, let’s look at a quick example. We often want to do a lot of data entry in a program, which means we need a lot of Label and Entry widgets. Sometimes there are so many of them that it’s hard to fit them all on the screen without making a mess of the window. By using a scrolled Text widget and putting the Label and Entry widgets inside it, we can create a lot more widgets in a smaller space. Here’s the code:

use Tk; $mw = MainWindow->new; $mw->title("Data Entry"); $f = $mw->Frame->pack(-side => 'bottom'); $f->Button(-text => "Exit", -command => sub { exit; })->pack(-side => 'left'); $f->Button(-text => "Save", -command => sub { # do something with %info; })->pack(-side => 'bottom'); $t = $mw->Scrolled("Text", -width => 40, -wrap => 'none')->pack(-expand => 1, -fill => 'both'); foreach (qw/Name Address City State Zip Phone Occupation Company Business_Address Business_Phone/) { $w = $t->Label(-text => "$_:", -relief => 'groove', -width => 20); $t->windowCreate('end', -window => $w); $w = $t->Entry(-width => 20, -textvariable => \$info{$_}); $t->windowCreate('end', -window => $w); $t->insert('end', "\n"); } $t->configure(-state => 'disabled'); # disallows user ...

Get Mastering Perl/Tk now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.