Traits UI Changelog

Release 6.0.0

This release introduces preliminary support for Qt5 via PyQt5, thanks to the work of Gregor Thalhammer which got the ball rolling. Qt5 support is not yet robustly tested in deployed applications, so there may yet be bugs to find. As part of this effort all occurences of old-style signals and slots have been removed; and this has greatly improved stability under Qt.

This release also features a great deal of work at the API level to disentangle the two-way dependencies between Pyface and TraitsUI. This has involved moving a number of sub-packages between the two libraries, most notably the zipped image resource support and a number of trait definitions. We have endeavored to keep backwards compatibility via stub modules in the original locations, but we can’t guarantee that there will be no issues with third party code caused by the change in locations. We haven’t been able to remove all dependencies, but as of this release on the dock and workbench submodules have required dependencies on TraitsUI.

As part of the latter work, support for TraitsUI Themes have been removed. This was a feature that was only available under WxPython, was slow, was never used in production code, and was not supported for over a decade. Some of the codebase remains as it is still used by the PyFace Dock infrastructure and several editors, but ther long-term intention is to remove this completely.

Another long-desired feature was the ability to write toolkit backends for Pyface and TraitsUI that are not part of the main codebase. This is now possible by contributing new toolkit backends to the “traitsui.toolkit” pkg_resources entry point in a This work was accompanied by an overhaul of the toolkit discovery and loading infrastructure; in particular Pyface and TraitsUI now share the same code for performing these searches and loading the backends.

The entire TraitsUI codebase has been run through the AutoPEP8, assisted with some customized fixups and occasional drive-by cleanups of code, which means that the codebase is generally easier to read and follows modern Python conventions.

Finally, the testing infrastructure has been overhauled to provide a one-stop location to run tests in self-contained environments using Enthought’s EDM package management tool. Tests can be run from any python environment with the “edm” command available and the “click” library installed with the “” script at the top level of the repository. In particular:

python test_all

will run all relevant tests for all available toolkits in all supported python versions. The TravisCI and Appveyor continuous integration tools have been updated to make use of these facilities as well.

Thanks to Matrin Bergtholdt, Alex Chabot, Kit Choi, Mark Dickinson, Robin Dunn, Pradyun Gedam, Robert Kern, Marika Murphy, Pankaj Pandey, Steve Peak, Prabhu Ramachandran, Jonathan Rocher, John Thacker, Gregor Thalhammer, Senganal Thirunavukkarasu, John Tyree, Ioannis Tziakos, Alona Varshal, Corran Webster, John Wiggins


  • Support for Qt5 (#347, #352, #350, #433)
  • Remove TraitsUI Themes (#342)
  • Improve Toolkit selection and handling (#425, #429)
  • API Documentation (#438)
  • Adapter documentation (#340)
  • Support multi-selection in DataFrameEditor (#413)
  • DataFrameEditor demo (#444)
  • Common BasePanel class for toolkits (#392)
  • Labels honor enable_when values (#401)
  • Better error messages when toolkit doesn’t implement methods (#391)
  • Improve TraitsUI Action handling (#384)
  • ListEditor UI improvements (#338, #396, #395)
  • Remove old style signals and slots for Qt backend (#330, #346, #347, #403)
  • Expose a “refresh” trait for the DataFrameEditor (#288)
  • Use Enthought Deployment Manager to automate CI and testing (#321, #357)
  • Continuous integration on OS X (#322)
  • Reduce circular dependencies of PyFace on TraitsUI (#304)
  • PEP8-compliant formatting of source (#290)
  • Add progress bar column for TableEditor (#287)
  • Add codecov coverage reports (#285, #328)


  • Fix some issues for newer WxPython (#418)
  • Fix Wx simple FileEditor (#426)
  • Fixes for DataFrameEditor (#415)
  • Fixes for preferences state saving under Qt (#410, #447)
  • Fix panel state after setting preferences (#253)
  • Fix TableEditor ColorColumn (#399)
  • Prevent loopback from slider in Qt RangeEditor (#400)
  • Fix Action buttons under Qt (#393, #394)
  • Fix ValueEditor icons (#386)
  • Fix bug in update_object (#379)
  • Avoid reading Event trait values in sync_value (#375)
  • Fix raise_to_debug calls (#362, #372)
  • Fix errors during garbage collection (#359)
  • Remove unused argument in wx.hook_events (#360)
  • Fix button label updates (#358)
  • Fix TreeEditor label updates (#335)
  • Proper InstanceEditor dialog lifecycle (#332)
  • Don’t explicitly destroy child widgets under Qt (#283)
  • Test fixes and improvements (#329, #369, #371, #327)
  • Fixes for demos and examples (#320, #445)
  • Fix CheckListEditor string comparison (#318)
  • Remove some spurious print statements (#305)
  • Documentation fixes (#301, #326, #380, #438, #443)
  • Fixes for Python 3 compatibility (#295, #300, #165, #311, #410)
  • Fix error with Qt table model mimetype (#296)
  • Fixes for continuous integration (#299, #345, #365, #397, #420, #427)
  • Fix offset issue when dragging from Qt TreeEditor (#293)
  • Fix Wx kill-focus event issues (#291)
  • Fix readthedocs build (#281)

Release 5.2.0


  • Add support for multi-select in the DataFrameEditor (#413).

Release 5.1.0


  • Enthought Sphinx Theme Support (#219)
  • Allow hiding groups in split layouts on Qt (#246)
  • Allow subclass of Controller to set a default model (#255)
  • Add toolbar in Qt UI panel (#263)


  • Fix Qt TableEditor segfault on editing close (#277)
  • Update tree nodes when adding children to am empty tree (#251)
  • Change default backend from Wx to Qt (#254, #256)
  • Improve toolkit selection (#259)
  • Fix capturing the mouse and click events on Wx (#265, #266)
  • Remove duplicated traits in NotebookEditor (#268)
  • Fix exception during disposal of ListStrEditor (#270)
  • Version number in documentation (#273)

Release 5.0.0

This release features experimental support for Python 3 with the Qt toolkit!

This is based in large part on the work of Yves Delley and Pradyun Gedam, but also owes a lot to Ioannis Tziakos for implementing container-based continuous integration and Prabhu Ramachandran and Corran Webster for tracking down last-minute bugs. Python 3 support is probably not yet ready for production use, but feedback and bug reports are welcome, and all future pull requests will be expected to work with Python 3.4 and later. Python 3 support requires Traits 4.5 or greater, and Pyface 5.0 or greater.

In addition, this release includes fixes to support wxPython 3.0 and deprecates wxPython 2.6. Thanks to Robin Dunn for providing these improvements.

This release also introduces a DataFrameEditor which provides a tabular view of a Pandas DataFrame, similar to the existing ArrayViewEditor.

There are also a number of bug fixes and minor improvements detailed below.

Finally, this release changes the default GUI toolkit from Wx to Qt. This changes the behaviour of the library in the case where both WxPython and PyQt/PySide are installed and the user or code doesn’t specify the toolkit to use explicitly.

New Features

  • Experimental Python 3 support (#230)
  • A DataFrameEditor for Pandas DataFrames, similar to the ArrayViewEditor (#196)


  • Change the default backend from Wx to Qt (#212)
  • Add a Qt version of the ProgressEditor (#217)
  • Links to demos in the documentation (#159)
  • Add minimal support for the dock_styles option to the Qt tabbed List Editor. (#143)


  • Fix failure to disconnect selection listeners for ListStrEditor in Qt (#223)
  • Fix layout of TextEditors in some situations (#216)
  • Fix removal of _popEventHandlers not owned by TraitsUI in Wx (#215)
  • Remove some old (TraitsUI 3.0-era) documentation (#214)
  • Help button now works on Qt (#160)

Release 4.5.1


  • Fix pypi installation problem (#206)

Release 4.5.0


  • Application-modal Traits UI dialogs are correctly styled as application-modal under Qt. On Macs, they will now appear as independent windows rather than drop-down sheets. (#164)
  • Qt CodeEditor now honors ‘show_line_numbers’ and the ‘readonly’ style (#137)
  • Deprecated implements declaration removed, use provides instead (#152)
  • Fix TableEditor so that Qt.QSplitter honors ‘orientation’ trait (#171)
  • Show row labels in Qt TableEditor when requested (#176)
  • Fix TupleEditor so that multiple change events are not fired (#179)
  • Numpy dependency is now optional. ArrayEditor will not be available
    if numpy cannot be imported (#181)
  • Add development versioning (#200)

Release 4.4.0

The biggest change in this release is support for the new adaptation mechanism in Traits 4.4.0. Other than that, there are a number of other minor changes, improvements and bugfixes.

Corran Webster (corranwebster on GitHub) is now maintainer of TraitsUI.

Change summary since 4.3.0

New Features

  • Changes for new Traits adaptation mechanism support (#113)


  • Add Travis-CI support.
  • Remove the use of the deprecated PySimpleApp under Wx and several other improvements. (#107)
  • Improvements to Qt TabularEditor, TableEditor and TreeEditor drag and drop support. Should be roughly on par with Wx support. No API changes. (#124, #126, #129, #135)
  • Improvements to PyMimeData coercion to better handle lists of items. (#127)


  • Fixes item selection issue #133 in ListStrEditor under Wx 2.9 (#137)
  • Fixes to avoid asking for value of a Delegated Event (#123 and #136)
  • Fix drag image location for Qt TreeEditor (#132)
  • Qt TreeEditor supports bg and fg colors and column labels correctly. (#131)
  • Fix ListEditor under PySide (#125)
  • remove event handlers before window destruction in Wx. Required for Wx 2.9. (#108)

There are currently some other unlisted changes going back some time before this file was created.

Traits 3.5.0 (Oct 15, 2010)


  • adding support for drop-down menu in Button traits, but only for qt backend
  • adding ‘show_notebook_menu’ option to ListEditor so that the user can right-click and show or hide the context menu (Qt)
  • added selection range traits to make it possible for users to replace selected text


  • fixed null color editor to work with tuples
  • bug when opening a view with the ToolbarButton

Traits 3.4.0 (May 26, 2010)


  • adding new example to make testing rgb color editor easier


  • fixed NumericColumn to not expect object to have model_selection attribute, and removed more dead theming code
  • fixed API bugs with the NumericColumn where its function signatures differed from its base class, but the calling code expected them to all be the same
  • fixed bug which was related to type name errors caused when running Sphinx
  • when using File(exists=True), be sure to validate the type of the value first before using os.path.isfile()

Traits 3.3.0 (Feb 24, 2010)


The major enhancement this release is that the entire Traits package has been changed to use relative imports so that it can be installed as a sub-package inside another larger library or package. This was not previously possible, since the various modules inside Traits would import each other directly through “traits.[module]”. Many thanks to Darren Dale for the patch.


There have been numerous minor bugfixes since the last release. The most notable ones are:

  • Many fixes involve making Traits UI more robust if wxPython is not installed on a system. In the past, we have been able to use Qt if it was also installed, but removing Wx would lead to a variety of little bugs in various places. We’ve squashed a number of these. We’ve also added better checks to make sure we’re selecting the right toolkit at import and at runtime.
  • A nasty cyclic reference was discovered and eliminated in DelegatesTo traits.
  • The Undefined and Uninitialized Traits were made into true singletons.
  • Much of the inconsistent formatting across the entire Traits source has been eliminated and normalized (tabs/spaces, line endings).

Traits 3.2.0 (July 15, 2009)


  • Implemented editable_labels attribute in the TabularEditor for enabling editing of the labels (i.e. the first column)
  • Saving/restoring window positions works with multiple displays of different sizes
  • New ProgressEditor
  • Changed default colors for TableEditor
  • Added support for HTMLEditor for QT backend using QtWebKit
  • Improved support for opening links in external browser from HTMLEditor
  • Added support for TabularEditor for QT backend
  • Added support for marking up the CodeEditor, including adding squiggles and dimming lines
  • Added SearchEditor
  • Improved unicode support
  • Changed behavior of RangeEditor text box to not auto-set
  • Added support in RangeEditor for specifying the method to evaluate new values.
  • Add DefaultOverride editor factory courtesy Stéfan van der Walt
  • Removed sys.exit() call from SaveHandler.exit()