Pmw megawidgets for Tkinter
Greg McFarlane <gregm@...>
(The Pmw Development Team has aspired to the "release early, release
often" school of free software. It has not always lived up to the
goal (the last release was over one year ago), so to try to remedy
this, we have made two releases in 24 hours! The first, 1.0, is
described below. The second, 1.1, was made 1) to fix a nasty bug just
reported by the Pmw Quality Assurance Team in the new Pmw.ScrolledText
row and column header functionality and 2) to boost the version number
to make it look like we are making progress.)
A new release of Pmw is out. Although this release is numbered 1.0,
Pmw has been in use for several years, has had many public releases
and is quite stable. The label 1.0 is given because the documentation
is finally complete.
Apart from the completed documentation, the main changes in this
- added row and column headers to Pmw.ScrolledText which can be used
to display tabular data
- added getvalue() and setvalue() methods to several megawidgets as
a consistent way to set and get the user-modifiable state
- made sub-classing simpler (when no new options or components are
- a sub-class of a Pmw megawidget does not need to have an
- if it does have an __init__() method, it does not need to call
- initialiseoptions() no longer requires an argument
- if used, defineoptions() and initialiseoptions() must always
be called in matching pairs
- made fixes to work with python 2.1 and 2.2
- many bug fixes and other improvements
To download Pmw or for more information, see the home page at
If you have any comments, enhancements or new contributions, please
contact me (gregm@...).
What is Pmw?
Pmw is a toolkit for building high-level compound widgets, or
megawidgets, constructed using other widgets as component parts.
It promotes consistent look and feel within and between graphical
applications, is highly configurable to your needs and is easy to
use. It uses the Tkinter python library.
Pmw consists of:
- A few base classes, providing a foundation for building
- A library of flexible and extensible megawidgets built on
the base classes, such as buttonboxes, notebooks,
comboboxes, selection widgets, paned widgets, scrolled
widgets and dialog windows.
- A lazy importer/dynamic loader which is automatically
invoked when Pmw is first imported. This gives unified
access to all Pmw classes and functions through the Pmw.
prefix. It also speeds up module loading time by only
importing Pmw sub-modules when needed.
- Complete reference documentation, covering all classes and
functions including all megawidgets and their options,
methods and components. Helpful tutorial material is also
- A test framework and tests for Pmw megawidgets.
- A slick demonstration of the megawidgets.
- An interface to the BLT busy, graph and vector commands.
The interface to Pmw megawidgets is similar to basic Tk widgets,
so it is easy for developers to include both megawidgets and basic
Tk widgets in their graphical applications. In addition, Pmw
megawidgets may themselves be extended, using either inheritance
The use of the Pmw megawidgets replaces common widget combinations
with higher level abstractions. This simplifies code, making it
more readable and maintainable. The ability to extend Pmw
megawidgets enables developers to create new megawidgets based on
Greg McFarlane Really Good Software Pty Ltd Sydney Australia gregm@...