O'Reilly logo

Mastering Perl/Tk by Nancy Walsh, Stephen Lidie

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 11.  Frame, MainWindow,and Toplevel Widgets

Frames and Toplevels are both designed specifically to be containers of other widgets. They differ in two ways: in their default settings and in their relationships to other widgets. A Frame, by default, has no visible border, relief, or anything to indicate that it’s there, whereas all Toplevel widgets have decoration that is consistent with the system on which your application is run. Also, a Toplevel can be manipulated independently of other Toplevel widgets within the application, whereas a Frame always requires a parent (a Toplevel or another Frame) to reside in. It can’t be independent.

We have already seen many examples using Toplevel widgets. The widget created by calling MainWindow->new is actually a Toplevel widget. If you print the variable, you see something like this:

print "$mw\n";    # prints: MainWindow=HASH(0x909a2d0)

This window is special because it displays itself automatically when you call MainLoop. In every other respect, that MainWindow widget is a Toplevel. By creating a Toplevel widget, you are creating another window as part of your application. Other Toplevel widgets in your program must be displayed explicitly somewhere in the code.

When to use an additional Toplevel is a design decision that you’ll have to make. You should use another Toplevel widget instead of the MainWindow if there is too much information to fit in one window. Using Toplevels to group information is also sometimes a good idea. You ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required