6 January 1997
Release of version 0.1
14 February 1997
Fixed bug in Counter demo for the Macintosh - the maximum size of an integer is smaller than the value returned by time.time().
Fixed bug in Grid demo for Tk 4.2 - grid_bbox returns garbage if it is called without update_idletasks. Also, grid_bbox can only have two arguments in Tk 4.1.
Modified ScrolledText demo so that the text widget contains enough text to require a vertical scrollbar.
Changes to PmwBase:
Prefixed the name of several private variables with a double underscore.
Added symbolic constants for the indexes into an optionInfo list.
Changed names of several methods and variables to be more descriptive.
Removed options() method.
Simplified configuration option data structures. Modified option handling code so that default options are set correctly. If an option is created before initialise() is called then initialise() checks if the option is set by the keyword arguments to initialise(). If not, then it is given the value found in the Tk option database, if a value exists, or the default value. If an option is created after initialise() is called, then it is given the value found in the Tk option database, if a value exists, or the default value.
Replaced usage of self._hull in megawidgets by interior() method.
Added autoclear option to ComboBox.
Fixed bug in ComboBox - fast clicking on the arrow button could result in an attempt to grab a window that was not yet visible.
Added "sys.exc_traceback = None" to the except clauses of all try statements so that references to objects in the stack trace would not be left.
Added takefocus option to PushButton.
Modified the getcurselection() method of ScrolledListBox so that it returns a string if the selection mode is 'single' or 'browse', rather than a tuple with one element. This also affects methods forwarded and derived from ScrolledListBox.
Modified ScrolledListBox so that it avoids unnecessary updates by using idle timer.
Modified ScrolledText to use grid instead of pack.
Added shutdown() function to Tk module to clean up all references to the Tcl interpreter and then delete it.
Fixed bug Tk module for the Macintosh - update() was being called in initialise() before the Tcl interpreter was created.
14 February 1997
Version 0.1.1 completed and released internally.
6 March 1997
Pmw now uses the standard Tkinter module. The Tk module has been dropped. This means that the Tk module functions such as after, bell, bind, update, etc, are no longer available and the equivalent Tkinter methods should be used.
To restore some of the features of the Tk module, Pmw.initialise() now adds run-time hooks into Tkinter to get notification of when Tk widgets are created and destroyed. It also modifies the CallWrapper class so that errors during callbacks and bindings can be displayed in a window. If Pmw.initialise() is not called, Tkinter is not modified and these features are not available.
If a Tk widget which is acting as the hull of a megawidget is destroyed, then the megawidget is destroyed as well. This can only happen if Pmw.initialise() is called.
Pmw.initialise() now takes the Tkinter root as its argument.
The parent of megawidgets now defaults to the Tk root. Previously, the parent of non-toplevel megawidgets had to be given.
Added PmwBase.tracetk() function to get trace of calls to the Tcl interpreter for debugging.
Added functions to PmwBase to display a busy cursor over the application such as when a modal dialog is displayed or it is blocked doing a long calculation. Uses busy command of the blt extension, if present.
Created a nifty new demo which demonstrates most of the megawidgets in a convenient way.
Added a TextDialog.
Added functionality to handle the grabbing of nested modal dialogs correctly.
Added an activatecommand option to Dialog which allows, for example, the PromptDialog widget to set the keyboard focus when it is activated.
Added tests for Counter and logicalfont.
The ScrolledListBox selectioncommand is no longer given the widget as its first argument.
Several method, function and component names were changed, to be consistent with the coding conventions.
Some of the effects of moving from the Tk module to Tkinter are:
The Tk module used to exit if there were no non-root toplevel windows shown. This is no longer the case and so the application must handle this explicitly, particularly if the root window is withdrawn and the last non-root toplevel is deleted by the window manager.
The Tk module bind functions and methods used to take a noEvent argument to indicate that the Tk event should not be passed to the callback. Tkinter does not support this.
The Tk module initialise() function should be replaced by "root = Tkinter.Tk()" and root should be used instead of "Tk.Root()"
The Tk module quit() function should be replace by "root.destroy()".
Toplevels are not hidden when created. To be consistent, MegaToplevels are not hidden either.
The hide and show methods are not available for Tkinter Toplevels, only MegaToplevels
There is no grid_configure method.
Tkinter.Canvas.coords() returns a python list, not a tuple.
The Tkinter cget and configure widget methods always return strings for the option values. The Tk module used to convert the string to the appropriate python type (such as string, integer, float, Variable, Image, callback function).
Tkinter Menu and Toplevel classes incorrectly have a pack method.
Menu class has no geometry method.
Canvas focus returns '' rather than None.
Text mark_gravity returns '' rather than None.
13 March 1997
Release of version 0.2
17 March 1997
Set default WM_DELETE_WINDOW protocol of Tkinter.Toplevel to destroy() and removed duplicated protocol request from all demos.
Modified text of ShowBusy demo to indicate that busy cursor will only be seen if the BLT extension is present.
Replaced call to update() in PmwLabeledWidget.py with update_idletasks().
Changed name of PromptDialog component from 'entry' to 'entryfield'.
28 April 1997
Version 0.3 released internally
19 August 1997
Many changes made (see the version 0.4 porting guide for more details).
The option propagation mechanism that iwidgets uses is too cumbersome, too hard to understand and, in python, too slow. Developed a new mechanism which is more explicit in naming options. This resulted in most options which were simply propagated to components being removed. Removed keep(), rename() and ignore() methods and "usual" options.
For speed, Pmw no longer queries the Tk option database for
default values for megawidget options. Hence, resource names and
classes do not need to be supplied when creating options and
None is returned for the resource name and class when using
configure()
to query the options. Option "types" no longer
used.
Changed method and component names to be more consistent.
Replaced most uses of pack() with grid().
Megawidgets no longer inherit from LabeledWidget. Instead they call createlabel() to optionally create the label component.
Removed child site from EntryField and rewrote ComboBox accordingly.
Wrote lots more documentation, including automatically generated reference manuals.
Removed PushButton and rewrote ButtonBox to directly create Tkinter.Buttons rather than PushButtons.
Added initialisation options - options which can be set at creation time but not later using configure().
Added aliases for components.
Modified the base classes so that during option configuration, components are configured before configuration called functions are called.
Added several more megawidgets.
Added interface to BLT graph and vector commands.
Created PmwLazy module for lazy importing of Pmw - avoids loading megawidgets which are not used.
Added several more functions for handling color and fonts.
Replaced Counter and EntryField time with timeN and time24
Pmw.initialise() will now create Tkinter.Tk if not given root.
1 September 1997
Release of version 0.4
5 September 1997
Modified the base classes so that the Tk option database resource class of megawidgets can be overridden in the call to the constructor using the hull_class option.
The separators in Pmw.PanedWidget are now active - they can be grabbed, like the handles, and moved around. The cursor now changes to the correct left/right or up/down cursor when over a separator or handle. (Clemens Hintze)
Fixed bug in MessageInfo demo Dismiss button. If it is invoked, an error occurs saying "not enough arguments". (Mark Colclough)
9 September 1997
Added the useTkOptionDb argument to Pmw.initialise which specifies that the initial values of megawidget options are to be set by querying the Tk option database.
When used to query options, the configure() method now returns the resource class and name of the options.
19 September 1997
Changed functions datestringtoint() and timestringtoint() to datestringtojdn() and timestringtoseconds(). Changed return value of datestringtojdn() to be Julian Day Numbers rather than seconds since the epoch.
Fixed a bug in the date Counter due to use of time.timezone, by replacing, when calculating date increments, calls to the time module with calls to datestringtojdn().
Added century pivot year (setyearpivot function) to Counter date datatypes to handle two-digit years.
Added date_dmy4, date_mdy4 and date_y4md datatypes to Counter.
Modified demos All.py and ScrolledText.py so that demos can be called from directories other than the demos directory. (Case Roole and Guido van Rossum)
Changed the default for the Pmw.Balloon label_justify option to left to improve appearance of multi-line balloons. Pmw.Balloon now replaces newlines with spaces in the statusHelp string so that the strings look better when displayed in a Pmw.MessageBar. (Andreas Kostyrka)
Pmw.Blt now calls package require BLT when checking for the existence of Blt, so that it can be loaded if it is not statically linked. (Clemens Hintze, Matthias Klose)
Copied earthris.gif and flagup.bmp files from Tcl distribution to test directory, just in case they have not been installed. (Jonathan Kelly)
Lots of improvements to the documentation and documenting recent changes.
16 October 1997
Modified Pmw.Balloon and Pmw.ComboBox to work around a bug in the Windows95 version of Tk which caused the popup windows to appear in the wrong place. (Fredrik Lundh and Jerome Gay)
Added Pmw.maxfontwidth() function. (Rob Pearson)
24 October 1997
Changed PmwBase._reporterror to handle the class exceptions of python 1.5. (Case Roole)
29 October 1997
Fixed a bug in forwardmethods() function which occurred if the toClass class had a method called type.
7 November 1997
Changed tests/Test._getErrorValue to handle the class exceptions of python 1.5. (Michael McLay)
Changed bug fix in forwardmethods() function to use the
exec execString in d
construct. (Guido van Rossum)
Can now use Pmw.MegaArchetype as a base class just to get option handling; it will not create the hull component unless requested. Moved __str__() and interior() methods from Pmw.MegaToplevel and Pmw.MegaWidget to Pmw.MegaArchetype class.
10 November 1997
Added textclass option to Pmw.ScrolledText and listboxclass option for Pmw.ScrolledListBox to allow embedding of custom widgets.
Added Mitch Chapman's FontText module to the demos
directory
and used it to display the demo source code in colour.
Added two notebook megawwidgets, Pmw.NoteBookR and Pmw.NoteBookS. (Case Roole and Joe Saltiel)
Added Pmw.ScrolledCanvas megawidget. (Joe Saltiel)
Added Pmw.TreeBrowse megawidget. (Michael McLay)
Added Pmw.Group megawidget and modified to use grid()
instead
of pack()
. (Case Roole)
Release of version 0.5
12 November 1997
Added pyclass option to components and removed textclass option from Pmw.ScrolledText and listboxclass option from Pmw.ScrolledListBox. (Suggested by Shen Wang)
Added label component to Pmw.ButtonBox megawidget.
Fixed mis-spelling of PmwTreeBrowse in Pmw.py.
Release of version 0.5.1
5 December 1997
The pyclass option can now be None. If so, createcomponent returns None.
Removed tagtype option from Pmw.Group. Can now use the more general tag_pyclass instead.
Added tcl call to load {} Blt
when testing for presence of Blt.
Added julian and papal options to Pmw.ymdtojulian and Pmw.juliantoymd functions and made sure divisions give the same result as C even when operands are negative.
Exported ymdtojulian and juliantoymd functions.
Fixed bug in activate method. Did not prepend TclError with Tkinter.
When the Blt busy hold command is called from showbusycursor, the
bindtags on the busy window are set so that no events cause
callbacks to occur for the toplevel or all bindings. Also, while
a busy window is up, the focus is changed to the busy window so
that no keyboard events are accepted. This fixes a bug where the
Tkinter._nametowidget function could crash with a KeyError: _Busy
if there was a binding on a toplevel window and the mouse
was pressed while the busy cursor was up.
9 December 1997
Fixed bug in Pmw.datestringtojdn() when dealing with century year, such as 2000.
10 December 1997
Added where option to Pmw.ScrolledText.importfile()
. (Graham
Matthews)
16 December 1997
Modified Pmw.RadioSelect and Pmw.ButtonBox so that you can no longer index their buttons using regular expressions. This feature seemed to have little use and caused problems with buttons labeled for example a* and b*. (Problem reported by Rob Hooft)
Added updateFunction option to Pmw.busycallback(). If set, the function will be called just after the command given to Pmw.busycallback(). If the function is set the Tkinter update() method, then this will clear any events that may have occurred while the command was executing.
30 December 1997
Changed ymdtojulian and juliantoymd functions to jdntoymd and ymdtojdn, because the meaning of "julian" is ambiguous, whereas the meaning of "Julian Day Number" is not (maybe).
Converted Pmw to use python 1.5 package mechanism. (Michael McLay and Case Roole)
Removed Pmw.py and PmwLazy files. Added __init__.py, PmwLoader.py and Pmw.def files. (Case Roole)
Applications can now specify at runtime which version of Pmw to use and also which alpha versions, if any. (Case Roole)
Modified Pmw code for the version of Tkinter released with python 1.5.
Release of version 0.6
5 January 1998
Fixed alpha version handling so that alpha versions do not have to supply PmwBase.py and PmwUtils.py. (Case Roole)
Added example alpha directory and documentation. (Case Roole)
7 January 1998
Added selectmode option to Pmw.RadioSelect megawidget. (Roman Sulzhyk)
Added some changes to Pmw.ScrolledCanvas to get around some bugs. (Joe Saltiel)
Release of version 0.6.1
8 January 1998
Added some more changes to Pmw.ScrolledCanvas. (from Joe Saltiel)
12 January 1998
Added Pmw.OptionMenu Megawidget. (Roman Sulzhyk)
20 February 1998
Added new Pmw.MenuBar features to delete menus and menuitems, enable and disable menu bar and to add cascade menus. (Rob Pearson)
Added extra arguments to Pmw.Color.spectrum for more control over color choice.
23 February 1998
Added canvasbind() method to Pmw.Balloon.
Fixed demos/All.py so that it will correctly determine which Pmw version to use even if it is in a directory symlinked to the demos directory.
Removed "import DemoVersion" from all demos, except All.py, so that they will work unchanged when copied outside of the Pmw distribution.
Release of version 0.6.2
Home. Pmw 0.6.2 Maintainer gregm@iname.com. 23 Feb 1998