15.3. Creating a Composite Widget Based on Frame
There are slight differences between creating a composite widget based on a frame and creating one based on a toplevel. I will include a short example for each to give you an idea of what you can do.
Assuming you're making a composite widget called MyWidget, the first five lines you absolutely must have in your new composite widget file are:
package MyWidget; require Tk::Frame; @ISA = qw(Tk::Frame); Construct Tk::Widget 'MyWidget'; sub Populate { ... }
You must declare your new widget as its own package, hence the package MyWidget line. (If you were going to have a subdirectory for your widgets, you would use DirName::MyWidget.)
The next two lines are simple: require Tk::Frame to make sure you have loaded the information necessary to use a frame widget, and then add Tk::Frame to the @ISA variable. The next line calls the Construct method from Tk::Widget (you could also write this as Tk::Widget->Construct("MyWidget")) with the name of your widget. In this call to Construct you do not add the name of the directory in which your widget resides.
By calling Construct, you create a constructor method for your new MyWidget widget. This allows you to create a new MyWidget by calling the MyWidget method:
$newwidget = $mw->MyWidget(...);
You are creating a composite widget based on a frame, so you need to use Populate to create your subwidgets and do any other necessary configuration.
15.3.1. Inside Populate
It is a good idea to add a
Get Learning 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.