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 ...

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

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.