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.
already seen many examples using Toplevel widgets. The widget created
MainWindow->new is actually a
Toplevel widget. If you print the variable, you see something like
print "$mw\n"; # prints: MainWindow=HASH(0x909a2d0)
This window is special because it displays itself automatically when
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 ...