Releases: enthought/traitsui
Release 7.1.0
TraitsUI 7.1.0 is a minor feature release which introduces a new testing library and a number of significant fixes. Demo examples are also distributed as package data such that they are visible via the "etsdemo" GUI application (to be installed separately).
Highlights of this release
- A new
traitsui.testing.api
module has been introduced for testing GUI applications built using TraitsUI. See Testing TraitsUI Applications for an introduction. Builtin support has been added for testing several TraitsUI editors. More support will be added in the future. - On OSX and Qt, there have been reports of missing UI view updates after a push button is clicked. While this is suspected to be a Qt issue, changes have been made to ButtonEditor, SetEditor and ImageEnumEditor to mitigate the situation.
- The internal logic for disposing an instance
traitsui.ui.UI
is changed as an attempt to resolve AttributeError that occurs while a nested UI is removed.
Notes on upgrading
- On the issue about Qt button not causing views to update on OSX, projects that have been working around the issue by adding
GUI().process_events()
(or similar) in their applications may now try to remove those workarounds. However, the change that mitigates the issue in a production environment has implications for tests: The button's click slot is no longer invoked immediately but always invoked by the Qt GUI event loop. Tests that used to call the Qt buttonclick
method directly and rely on the event to happen
immediately will now need to update their tests to ensure that the click slot is processed by the Qt GUI event loop in the same order as before. Consider using the new testing library which automatically runs the GUI event loop after each interaction (e.g. mouse click).
Future removals
traitsui.image
has been moved topyface.image
more than 3 years ago and has since been deprecated. Previously it was scheduled to be removed in TraitsUI 6.0. This planned removal is now deferred to TraitsUI 7.2.
Detailed changes
More than 100 PRs went into this release. Thanks to:
Aaron Ayres, Ieva Cerny,Kit Yan Choi, Mark Dickinson, James Johnson, Eric Larson, Rahul Poruri, Jonathan Rocher, Kuya Takami, Ioannis Tziakos, Corran Webster
Note that the following list is not exhaustive. Many more PRs references have been omitted.
Features
- Add :class:
~traitsui.testing.ui_tester.UITester
for testing TraitsUI applications (#1107, #1157, #1171, #1175, #1179, #1201, #1207, #1269)
Fixes
- Fix AttributeError when a nested UI is disposed (#1286)
- Fix wx error due to use of alignment flag wxEXPAND (#1095)
- Fix ButtonEditor not causing other widgets to update on OSX and Qt (#1303)
- Fix ImageEnumEditor button not causing other updates on OSX (#1326)
- Fix SetEditor on Qt and OSX not updating view after button clicks (#1325)
- Fix for menu actions with on_perform being performed twice (#1199)
- Fix deprecation warnings from Traits 6.1 due to the use of PrefixList (#1053)
- Fix deprecation warnings from using HasTraits.trait_get (#1062)
- Fix deprecation warnings from using QDesktopWidget.availableGeometry (#1311)
- Fix deprecation warnings from using logging.warn (#1165)
- Fix deprecation warnings from using ABC in collections (#1103, #1129)
Documentation
- Make demo examples as package data (#1088)
- Add UITester documentation in User Manual (#1263)
- Add Developer Guide with internals on the testing package (#1314)
- Fix warnings in demo examples documentation (#1378)
- Generate API documentation automatically (#1368)
Build and continuous integration
- Add a CI job for testing against traits 6.0 (#1108)
- Move MacOS CI build from Travis to Appveyor (#1160)
- Add flake8 task to CI with exclusions (#1222)
- Explicitly declare additional dependencies for demo examples (#1147)
- Explicitly require a minimum version for Traits (#1323)
Maintenance and code organization
- Relax constraint on PySide2 version (#1146)
- Update edm version in travis and appveyor config files (#1049)
- Resolve warnings in tests from QItemSelectionModel with Qt5 (#1041)
- Improve how we capture and re-raise errors in GUI tests (#1099)
- Replace screen metrics code with Pyface implementation (#1322)
- Fix deprecation warnings from certain usage of QDateTime in tests (#1310)
- Add a new shell command to etstool.py (#1244)
Release 7.0.1
This is a bugfix release that fixes a number of issues since the 7.0.0 release.
It includes fixes to various editors, improvements to tests and fixes to the
demo application.
Thanks to Ieva Cerny, Kit Choi, Mark Dickinson, Robert Kern, Eric Larson,
Federico Miorelli, Joris Vankerschaver, Corran Webster.
Fixes
- Fix error from true division of integers for Qt RangeEditor and BoundsEditor
(#999, #1000) - Fix handling of minimum and maximum datetimes in Qt DatetimeEditor (#803)
- Fix error in wx TabularEditor (#969)
- Fix wx panel error due to alignments (#829)
- Fix various issues in the demo application (#799, #808)
- Fix format_func not used when EnumEditor is initialized with static values
(#848) - Fix demo application description (#850)
- Fix auto-add functionality in ListStrModel (#860)
- Fix segmentation fault for TabularModel (#871, #873)
- Fix event handling in ListStrEditor and TabularEditor for adding and removing
items (#875) - Fix TabularAdapter crashes when column number reduces (#897)
- Fix theme pickling issue (#915)
- Fix error from example's tutor.py script (#813)
Documentation
- Add links from TabularEditor and TreeEditor to adapter documentation (#917)
Tests
- Rewrite nose tests to unittest (#809)
- Use unittest discover instead of nose.core (#810)
- Add more tests for EnumEditor (#836)
- Add CheckListEditor tests (#837)
- Add SetEditor tests (#838)
- Add ImageEnumEditor tests (#845)
- Add more ListStrEditor tests (#869)
- Add more TabularEditor tests (#874)
- Make sure all UI in tests are disposed (#865)
- Add tests for layout and labels using any non-null toolkits (#846)
Release 7.0.0
TraitsUI 7.0.0 is a major release which focuses on modernization of the
codebase. This release includes updating the WxPython backend to support
WxPython 4, an effort led by Rob McMullen's first cut at support, with
help from a number of other people, particularly Per Brodtkorb. It also
updates the code to use new features of Traits 6, and just like Traits 6,
this release drops support for Python 2.
In addition to the modernization, this code fixes many bugs and adds some
useful new features, including:
- a DatetimeEditor to go with the new Datetime trait in Traits 6
- an API to add placeholder text to a TextEditor
- support for the LEDEditor in Qt
Finally, the documentation has been improved, adding sections about some
of the internals of the TraitsUI mechanisms. Additionally, the Examples,
Demos and Tutorials have been improved and cleaned-up, including fixing and
unifying the demo viewer codebase.
Thanks to Per Brodtkorb, Christian Brodbeck, Kit Choi, Mark Dickinson, Matt
Hancock, Sandhya Govindaraju, Midhun Madhusoodanan, Rob McMullen, Shoeb
Mohammed, Eric Olsen, Roberto Preste, reckoner, Jonathan Rocher, Scott
Talbert, Corran Webster.
Enhancements
- Documentation improvements (#720, #724, #723, #778)
- WxPython 4 compatibility and support (#708, #736, #762, #772, #775, #776)
- Traits 6 compatibility and enhancements (#689, #690, #693, #695, #713, #727, #770)
- Style improvements (#648, #771)
- Add placeholder text option for TextEditor (#735)
- Examples clean-up and unification (#697, #702, #703, #705, #711, #712, #777)
- Add a DatetimeEditor (#719, #730)
- Refactor and clean-up of base Editor class (#685, #686, #688)
- Remove use of Category classes from TraitsUI (#654)
- Add LEDEditor for Qt (#635)
- Add 'docs' command to etstool.py (#624)
- Add TabularAdapter to traitsui.api (#627)
- Enhancements to CI and testing (#683, #714, #740)
Fixes
- Documentation fixes (#546, #766)
- Fix cgi.escape for Python 3.8 (#780)
- Log exceptions in table sorting (#751)
- Use TupleEditor for traits derived from BaseTuple (#747)
- Fixes for Undo/Redo (#733)
- Add explicit redraw for TableEditor selection (#721)
- Fixes for Qt5 support (#709)
- Fix bugs in color functions (#707, #744)
- Fix importing of ProgressColumn and EditColumn (#691)
- Set initial focus item correctly in Qt (#602)
- Fix text elision test on some platforms (#644)
- Fix a bug with TableEditor column clicking (#669)
- Fix typo in progress column exception (#662)
Release 6.1.3
Release 6.1.3
A bugfix release that fixes a number of issues discovered since the
6.1.2 release. In particular this fixes a number of issues around the
TableEditor and TabularEditor for the Qt toolkit which didn't match
the advertised behaviour in the documentation.
Thanks to Qi Chen, Vladimir Chukharev, Mark Dickinson, Sandhya Govindaraju,
Maxwell Grady, Scott Maddox, Sean Parsons, Rahul Poruri, Corran Webster.
Fixes
- Add "bool" to allowed types for TableColumn (#656)
- Fix tabular editor column widths (#652)
- Fix setting valus in DataFrameEditor (#651)
- Allow '...' in addition to ellipsis in text elision (#644)
- Handle invalid values in RangeEditor better (#637)
- Fix multi-select in Qt TabularEditor (#633)
- Fix call to Bind in Wx FileEditor (#628)
- Fixes to doc links in tutorial (#619)
- Remove 3.5 from test matrix (#615)
- Ensure etstool.py has consistent default Python versions (#614)
- Fix typos in comments for table editor (#610)
- Comprehensive tests for the base Editor object (#609)
- Fix ContextValue init method (#607)
- Fix tutor.py in examples for Python 3 (#603)
- Set initial item focus correctly on Qt (#602)
- Make View and UI icons an Image trait (#600)
- Fix TableEditor styling for Qt (#597)
Release 6.1.2
A bugfix release that fixes a number of issues discovered since the 6.1.1 release. In particular this fixes a couple of issues that impacted the usability of Mayavi.
Thanks to Mark Dickinson, Maxwell Grady, Prabhu Ramachandran, Matt Reay, Ajeet Vivekanandan, Corran Webster, John Wiggins.
Fixes
- Fix tree node copy failure to copy (#590)
- Fix/scroll to row preserve column (#588)
- Call correct object on label change for TreeNodeObject (#586)
- Remove uses of etsdevtools (#577)
- Fix modal view application (#574)
- Remove unicode usage (#572)
- Update Travis CI configuration to be compatible with Ubuntu Xenial. (#569)
- Build CI on maintenance branches (#567)
- Fix an erroneous handler removal (#566)
- Fix the sizeHint() default for TreeItemDelegate (#565).
- Update unittest import (#564)
Release 6.1.1
Release 6.1.0
This is an incremental release without many new features, but with significant improvements in the code base and numerous small bugfixes. Probably the most significant change, but one not obvious to most users is that we have moved away from using 2to3 for Python 3 support to using a single codebase with the six library to patch over the differences. This significantly enhances maintainability and development speed, and gives a better path forward for future Python versions.
Additionally, this release introduces experimental support for PySide2 (also known as "Qt for Python"). Pyside2 was enabled as a potential backend in 6.0.0 but there was no testing being performed. As of this release PySide2 is now tested as part of the CI system with tests passing on Linux and OS X using the 5.11 release. There are currently issues with the 5.12 release which have yet to be fully investigated.
The one significant new feature that has been added to this release is the ability to completely replace the rendering of TreeEditorNodes with custom rendering code on Qt (due to the limitations of the Wx tree control, this is unlikely to be extended to Wx). An example showing the drawing of sparkline plots in TreeEditor cells has been added to the code demos.
There has been a long-standing issue with the way that the Qt TableEditor handled selections, and this release fixes this, matching the behaviour of the Wx backend and the documentation. It is possible that this may break code that was written expecting the buggy behaviour.
Finally, there are a large number of minor bug fixes
Thanks to:
Martin Bergtholdt, Stefano Borini, Alex Chabot, Kit Choi, Mark Dickinson,
Kevin Duff, Matthew Evans, Matt Hancock, Robert Kern, Fede Miorelli,
Rahul Poruri, Jenni Portman, Prabhu Ramachandran, @ransonr, Jonathan Rocher,
Roger Serwy, Ajeet Vivekanandan, Corran Webster, John Wiggins.
Enhancements
- Switch to using six instead of 2to3 (#482, #484, #486, #498, #531).
- Experimental Pyside2 support (#451, #500, #504).
- Allow arbitrary rendering of tree nodes in Qt backend (#499, #502, #527).
- Use tooltip metadata on a trait instead of desc, if available (#473).
- Enable scroll to column for TabularEditor (#547)
- Add demo for tabular editor with context menu (#460).
- Allow the use of extended trait names in TreeNodes where possible (#500, #528).
- Allow drag move and drag copy modes on Qt TabularEditor (#363).
Fixes
- Fixes to README (#478).
- Documentation fixes (#471, #508).
- Fixes to setup.py (#549).
- Fix an attribute error on Qt TextRangeEditor (#540).
- Use SimpleEditor for Qt TextEditor's "text" style (#535).
- Fix handling of Range traits with a mix of constant and named bounds (#533).
- Fix display selection on Wx backend (#534).
- Fixes for Qt TableEditor selections (#275).
- Fix deprecation warnings for inspect.getargspec (#530).
- Fixes to etstool (#526).
- Fix TreeEditor unhashable type errors (#525).
- Fix crash when TabularEditor has no columns (#521).
- Clone editor factories so they don't share traits (#519).
- Avoid creation of dummy traits by springy items (#515).
- Fix drag and drop crash in Python 3 (#516).
- Fix Undo/Redo for readonly items and error handling (#510).
- Fix source parsing in demo app (#501).
- Fix signature of close() method of Qt modal dialog (#506).
- Fix incorrect code in Wx ColorEditor (#479).
- Fix incorrect code in Wx ProgressEditor (#513).
- Remove uses of deprecated HasTraits.set() calls (#457).
- Fix rendering of CheckboxColumn on OS X and Qt (#456).
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 setup.py. 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 "etstool.py"
script at the top level of the repository. In particular::
python etstool.py 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 Martin 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
Enhancements
* 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)
Fixes
~~~~~
* 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)
5.1.0
Release 5.1.0
Enhancements
- 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)
Fixes
- 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)
5.0.0
What's new in Traits UI 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)
Enhancements
- 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)