TkinterTreectrl

The TkTreectrl module wraps the treectrl tk extension for use with Python/Tkinter.
I built the module on top of treectrl-2.1, so compatibility with older version of the treectrl widget cannot be guaranteed.
The treectrl widget allows to create fancy things like sortable multi column listboxes and hierarchical tree views. An impressive set of screenshots of things you can do with treectrl can be found at the treectrl web page.

Installation

Unpack the zip-archive and run:
    # python setup.py install
or simply copy the TkTreectrl folder into your Python installation's site-packages directory.

Of course you will also have to install the Tcl/Tk treectrl package to be able to use the TkTreectrl module.
On windows systems simply download the tktreectrl-2.x.x-Tk8.x-win32.zip archive suitable for the Tk version in use and copy the contents of the archive into your Python installation's tcl folder.
On unix systems you will probably have to compile the treectrl package from the sources. To do so, download and unpack the latest tktreectrl-2.x.x.tar.gz archive, cd into the tktreectrl-2.x.x directory and type (as root)
    # ./configure && make && make install
If this fails it is most likely because configure cannot find the Tcl installation. In this case (or if you have multiple versions of Tcl/Tk installed) you have to pass the paths to the tclConfig.sh and tkConfig.sh to configure , as for example:
    # ./configure --with-tcl=/usr/lib/tcl8.4 --with-tk=/usr/lib/tk8.4
    # make
    # make install

Documentation

There's a html reference manual included in the download. For more detailed information please refer to the treectrl man page (included in the treectrl distribution).

Bugs

For the most part it seems to work well, but some parts may still be considered experimental (especially I'm not happy with the implementation of the notify_generate() and notify_install() methods; suggestions are welcome).

Please report any bugs to <klappnase (at) freakmail (dot) de>.

Please note: due to an incompatibility between Python-2.5 and Tktreectrl versions < 2.2.3 the widget will cause a segfault when it is being used with Python-2.5 (this has been observed on several flavors of unix, on other platforms it may work). This is not a bug in TkinterTreectrl. For a discussion on this topic look here.
Upgrading to either Python-2.5.1 or treectrl-2.2.3 fixes the problem, so the patch for treectrl-2.2.1 I used to offer has been removed.

Usage

Once the TkTreectrl package is installed it is safe to do:
    from TkTreectrl import *
This adds the widget classes: Treectrl, MultiListbox, ScrolledTreectrl, ScrolledMultiListbox and ScrolledWidget into the current namespace.
Consult the scripts in the demo directory for a few usage examples.

Screenshots

In case you are interested, I made a couple of screenshots on my debian linux box (20 kB).

News

Nov. 30 2006: TkinterTreectrl-0.6

The major change in this release is the introduction of a few new widget classes:
MultiListbox is a Treectrl widget set up to work as a (more or less) full-featured and very flexible multi column listbox widget.
The ScrolledTreectrl and ScrolledMultiListbox classes use ideas shamelessly stolen from Pmw.ScrolledListbox to add one or two static or automatic scrollbars to the widgets. They both inherit from the ScrolledWidget class that is supposed to make it easy to add scrollbars to any other Listbox or Canvas alike Tkinter widget.
Changes to the Treectrl widget:
I added the second (optional) last argument to column_delete(), which is new in treectrl-2.1.1 .
A bug in item_sort() was fixed: it is now possible to use the command and mode options together, which may be useful if you want to use the same command in increasing and decreasing mode. To enable this, mode now defaults to None instead of ascii.
Caution: this change may be backwards incompatible in some cases!
It is also possible now to specify a sequence of strings as mode, like mode=("integer", "decreasing").
The class variables TreectrlVersion, _last_element and _last_style were accidentally handled as instance variables, this has been fixed.

Jan. 22 2007: TkinterTreectrl-0.7

Added new features from treectrl-2.2 :
new methods:
bbox(), column_tag_add(), column_tag_expr(), column_tag_names(), column_tag_remove(), item_tag_add(), item_tag_expr(), item_tag_names(), item_tag_remove(), item_descendants(), item_enabled().
methods accepting new (optional) arguments:
selection_get(), column_count(), item_count()
Bug fixes:
item_id() was broken if no matching item exists; item_dump() tried to convert textual strings into integers
Interface changes:
item_id() now returns a tuple of matching ids instead of an integer; this is necessary, so the new feature of multiple items matching the same tag can be used.
CAUTION: this is backwards incompatible!

Nov. 10 2007: TkinterTreectrl-0.8

In previous versions "package require treectrl" was only called when creating the first Treectrl widget which seemed to fail in some situations; now on every widget creation "package require treectrl" is called.
A __version__ attribute was added to __init__.py .
Besides this I replaced the happydoc html docs with those generated by a hacked standard pydoc which makes the docs somewhat easier to handle.

Aug. 08 2010: TkinterTreectrl-1.0

I updated the Treectrl class and the documentation to reflect the changes and new features since treectrl-2.2 to treectrl-2.2.10 .
A bug in Treectrl.selection_get() that caused a TypeError to be raised when selection_get() was called with "first" and/or "last" arguments and a single item was currently selected is now fixed.
MultiListbox.insert() now returns the item id of the newly created item.
Besides this I finally updated the version to 1.0 ; I've been using the TkTreectrl modules for years now without any problems, so I believe it deserves it.

Download

TkinterTreectrl-1.0.zip (73 kB)

License

TkinterTreectrl is free to use and distribute.