pyface

pyface: traits-capable windowing framework

OTHER License

Downloads
27.7K
Stars
106
Committers
97
pyface - Pyface 8.0.0 Latest Release

Published by corranwebster over 1 year ago

Highlights of this release

This is a major release which removes a number of things which have been deprecated for a number of years. The most significant change in this release is that the Qt toolkit backend has been moved from the pyface.ui.qt4 package to the pyface.ui.qt package. The "qt4" namespace had been an ongoing source of confusion as Qt5 and Qt6 became the most popular versions of Qt in use. Because this change has the potential to cause significant backwards compatibility issues, this release includes import hooks to continue to support imports from pyface.ui.qt4... which can be enabled by:

  • using "qt4" for the ETS_TOOLKIT or ETSConfig.toolkit values.
  • setting the ETS_QT4_IMPORT environment variable to a non-empty value
  • explicitly adding the import hooks to sys.meta_path

In particular the environment variables allow users of ETS-based applications such as Mayavi to continue to use those applications with newer versions of Pyface until there is time to update their code to the new import locations.

Additionally this release uses the module-level __getattr__ system introduced in Python 3.7 to delay imports from the api modules which have side-effects, particularly toolkit selection. This means that you can, for example, import pyface.api and toolkit selection will be deferred until you actually request a class or object which is toolkit-dependent. Part of this included adding formal interfaces for ActionManager and its subclasses

In addition this release:

  • adds support for Python 3.11 and drops support for Python 3.6
  • adds support for PySide 6.4+ and the new enum system
  • removes code supporting PyQt4, and supports more modern imports from
    pyface.qt, such as pyface.qt.QtWidgets.
  • removes many things flagged as deprecated in Pyface 7
  • consistently add interface classes to api modules.
  • adds new Field subclasses, including an ImageField and LabelField
  • moves to a pyproject.toml-based packaging solution, removing setup.py

Detailed changes

Thanks to:

  • Mark Dickinson
  • Dominik Gresch
  • JaRoSchm
  • Rahul Poruri
  • Corran Webster

Features

  • Refactor IField and add IImageField and ILabelField Field classes (#1234)
  • Move pyface.ui.qt4 to pyface.ui.qt (#1223, #1228)
  • Delayed imports with side-effects in api modules; new interfaces for
    ActionManager and its subclasses (#1229)

Enhancements

  • Better handling of sizes for multiple (or no) screens (#1237)
  • More arguments for the confirm function (#1221)
  • Expose interfaces in api modules and other improvemnts to api modules
    (#1220, #1222, #1229)
  • remove deprecated modules and code (#1209, #1215)
  • PySide 6.5 support (#1238)
  • Python 3.11 and PySide 6.4 support (#1210)

Fixes

  • Always use a no-delay timer for GUI invoke_later and
    set_trait_later on Qt (#1226)
  • Work arounds for some end-of-process segfaults on PySide < 6.4.3 (#1214)
  • Use exec instead of exec_ where possible (#1208)
  • Emit a warning rather than asserting in SplitTabWidget (#1192)
  • Remove required parent argument in Wx StatusBarManager (#1192)
  • Use integer division in DockSplitter.draw (#1190)

Documentation

  • general updates and enhancements (#1238)
  • update copyright dates (#1191)

CI

  • remove setup.py and use pyproject.toml (#1203, #1214)
pyface - Pyface 7.4.4

Published by corranwebster almost 2 years ago

Highlights of this release

This is a quick bugfix release that resolves some issues with the 7.4.3 release on CI for downstream projects. The issues were on testing code, and so shouldn't impact application code or behaviour.

Detailed changes

Fixes

  • Don't raise ConditionTimeoutError if test doesn't time out (#1182)

CI

  • get CI working again with ubuntu-current on GitHub (#1186)
pyface - Pyface 7.4.3

Published by corranwebster almost 2 years ago

Highlights of this release

This is a bugfix release that collects a number of additional issues discovered
and fixed since the 7.4.2 release. Among the fixes, this pins PySide6 to less than
6.4.0, as 6.4 has breaking changes in it.

Thanks to:

  • Alex Chabot-Leclerc
  • Mark Dickinson
  • Eric Larson
  • Steven Kern
  • Corran Webster

Detailed changes

Fixes

  • Fix code editor gutter widget on recent Python versions (#1176)
  • fix issues with FileDialog and DirectoryDialog close method on Linux (#1175)
  • update setup.py metadata (#1173)
  • restrict to PySide versions before 6.4.0 (#1169)
  • don't do unneccessary evaluations of conditions in EventLoopHelper (#1168)
  • fix a deleted object error in PyQt5 (#1161)
  • better reporting of toolkit errors (#1157)

Documentation

  • fix some Python 2 style print statements in documentation (#1157)
pyface - Pyface 7.4.2

Published by corranwebster over 2 years ago

Highlights of this release

This is a bugfix release that collects a number of additional issues discovered
and fixed since the 7.4.1 release.

Detailed changes

Thanks to:

  • Eric Anderson
  • Mark Dickinson
  • Robert Kern
  • Orion Poplawski
  • Rahul Poruri
  • PyHannes
  • Corran Webster

Fixes

  • fixes for Qt workbench backend (#1149)
  • fix ConsoleWidget PySide6 issues (#1146, #1147)
  • fix default AboutDialog image (#1142)
  • remove reference cycle for actions on clean-up (#1143)
  • status bar manager not cleaned up properly (#1141)
  • expose QOpenGLWidget in a consistent place in pyface.qt (#1138)
  • map popup menu coordinates to global (#1137)
  • fix issues with last window close on Qt6 (#1136)
  • font size and stretch are ints at the toolkit level (#1118)

Documentation

  • add copy buttons for example code (#1134)

CI

  • add a publish to PyPI Github action (#1126)
pyface - Pyface 7.4.1

Published by corranwebster over 2 years ago

Highlights of this release

This is a bugfix release that fixes an issue that was causing memory
corruption and occasional segfaults when using the new ArrayImage and
PILImage classes on Windows with PySide2.

Detailed changes

Thanks to:

  • Mark Dickinson
  • Rahul Poruri
  • Corran Webster
  • John Wiggins

Fixes

  • fix segfaults and memory corruption from dropped QImage references (#1108)
pyface - Pyface 7.4.0

Published by corranwebster over 2 years ago

Highlights of this release

This release features some significant refactoring and reorganisation of the
Pyface API aimed at making it generally more coherent. Specific changes
include:

  • adding intermediate interfaces and classes to collect common roles and
    behaviours.
  • adding hooks to control widget sizing behaviour within layouts/sizers.
  • deprecating behavior where a class creates the underlying toolkit widget in
    the __init__ method. This was done by a small minority of Widget classes,
    now all widgets are able to use two-step creation (first the
    instance, then the toolkit object via the create() method).
  • creating Qt versions of some widgets, and filling in some gaps in widget
    types (particularly for Fields)
  • providing image classes that wrap PIL images and NumPy arrays that allow
    dynamic images and icons in addition to the resource-based versions.
  • providing a toolkit-independent Font class and corresponding trait that
    supports similar use-cases to the existing TraitsUI Font trait.
  • extracting the menu and toolbar Schema system from Tasks and making it more
    generally useable.

All changes should be backwards compatible, and deprecated APIs have a clear
path forward.

Additionally, this release adds experimental support for Qt 6 in the pyface.qt
API. Downstream packages can use the "pyqt6" and "pyside6" values for
QT_API and CI is being run and passing with PySide6. We generally plan to
move the default development environment to Python 3.8 and PySide6 over the
next few months.

Corresponding to this, PyQt4 support is deprecated, CI is no longer being run
for PyQt4 (which has been at end-of-life since 2015) and remaining support for
PyQt4 will be removed in the next major release.

Detailed changes

Thanks to:

  • Aaron Ayres
  • Kit Choi
  • Nicola Di Mitri
  • Mark Dickinson
  • Frank Longford
  • Rahul Poruri
  • Diego Ramirez
  • Palash Vishnani
  • Corran Webster

Enhancements

  • Make Action Schemas a generic feature, not specific to Tasks (#1076, #1079)
  • Add a FontDialog class (#1067)
  • Allow experimental use of Qt6 backends (#1050, #1057, #1059)
  • Add DropHandler classes to public API (#1049)
  • Make Color and Font traits available in pyface.ui_traits and no longer import
    them from traits.api (#1043)
  • Add multi-file selection for IFileDialog (#1031)
  • Support widgets and context menus for any concrete widget (#1019, #1020,
    #1066)
  • Add an ILayoutWidget interface and LayoutWidget base class for widgets which
    can be used as layout/sizer items and refactor appropriate classes to use
    it (#1016, #1018)
  • Add an _initialize_control method to base IWidget interface (#1013)
  • Deprecate creation of widgets in init, use separate create call (#993)
  • Add ILayeredPanel and Qt implementation of LayeredPanel (#982)
  • Improvements to PythonEditor and PythonWidget classes (#980)
  • Improvements to SplitWidget widget (#977)
  • Improvements to HeadingText widget (#976)
  • Add toggle field widget classes (#962)
  • Improvements to image support allowing dynamic images from PIL, NumPy (#693,
    #959, #960, #970, #997, #1002, #1004)
  • Further conversion to use observe system (#954, #963, #985, #1005, #1026)
  • Replace use of pkg_resources by importlib (#943, #991, #994, #1000)
  • Remove code branches for unsupported toolkit versions (#938, #939)
  • Replace uses of sys.exc_traceback with sys.exc_info()[2] (#936)
  • Replace old trait handlers with the new equivalents (#931, #1041, #1043)
  • Add a text_format argument to MessageDialogs for Qt (#907)
  • Add an enum type for DataViews (#782)
  • Add a ColorDialog class (#711, #1065, #1066)
  • Add a toolkit-independent Font class and associated traits (#609, #1066)
  • Add a TimeField widget class (#507)

Fixes

  • Support for PyQt6-style enums (#1098)
  • Fix an issue with circular references in EventFilters (#1093)
  • Select colors from palettes for better dark mode support (#1089)
  • Fix an issue with undocked dock panes not updating (#1044)
  • Remove uses of old trait constructors such as Either and Trait() (#728,
    #1041)
  • Fix SplitEditorAreaPane tab label and tooltip update bugs (#1038)
  • Fix broken local imports (#1034, #1036)
  • Fix active_task observer (#1026)
  • Fixes to make examples work (#988)
  • Better support for newer Python and Qt versions (#958, #964, #965)
  • Fix use of wx.StyledTextControl (#951)
  • Fix sizing of ImageButton when image changes (#932)
  • Fixes for observe integration (#915)
  • Code quality improvements (#914, #919, #920, #921, #922, #923, #935, #945,
    #946, #947, #920, #921, #922, #923, #1007, #1008, #1046, #1048, #1070, #1072,
    #1074)
  • Fix DockItem trait definitions (#902)

Documentation

  • Update discussion of toolkit support (#1101)
  • Documentation for standard dialogs (#1053)
  • Improvments to GUITestAssistant documenation (#1047)
  • Clean up unused links (#1012)
  • Documentation for ImageLibrary system (#1001)
  • Documentation for GuiTestAssistant and ModalDialogTester (#933)
  • Add documentation for contents of API modules (#903)

Build, Tests and Continuous Integration

  • Ensure tests run cleanly in Python 3.8 and when some packages missing (#1090)
  • Flake8 style check in CI (#1073)
  • Use most recent EDM version (#1058)
  • Support MacOS Big Sur in CI (#1056)
  • Add flake8 command to etstool.py (#1027)
  • Rename "master" branch to "main" (#1011)
  • Tests for ImageLibrary system (#1003)
  • Allow manual triggering of cron CI jobs (#975)
  • Generic modules for testing classes (#926, #956)
  • Move CI to github actions (#950, #961, #967, #1056)
  • Drop PyQt4 from CI (#949, #955)
  • Improvements to CI (#908)
pyface - Pyface 7.3.0

Published by aaronayres35 over 3 years ago

The most significant change introduced in this minor release is the
replacement of Traits on_trait_change-based listeners with the new Traits
observation framework.

This release is only compatible with Traits >= 6.2.0 i.e. the most recent
version of Traits.

Highlights of this release

  • Replace use of Traits on_trait_change with observe.

Detailed changes

Thanks to:

  • Aaron Ayres
  • Kit Yan Choi
  • Rahul Poruri
  • Corran Webster

Fixes

  • Fix undo/redo merge bugs. (#885)
  • Fix importing QtWebEngine after toolkit selection. (#853)

Documentation

  • Improve api documentation for pyface.tasks submodules. (#844)
  • Improve api documentation for pyface.undo and
    pyface.undo.action submodules. (#847)
  • Improve api documentation for pyface.action and
    pyface.tasks.action submodules. (#843)
  • Use viewcode sphinx extension. (#851)
  • Address a few sphinx warnings. (#846)

Build, Tests and Continuous Integration

  • Stop running CI on traits 6.0. (#865)
  • Skip test if wx is not installed. (#867)
  • Declare python_requires to support Python >= 3.6. (#850)

Maintenance and code reorganization

  • Replace use of traits on_trait_change with observe. (#892, #882,
    #881, #880, #870, #864)
  • Import from traits.api where possible. (#866)
  • Expose keyboard focus on Widgets. (#862)
  • Remove support for PySide. (#861)
  • Remove Python 2 sip configuration for Qt toolkit backends. (#860)
  • Remove coverage reporting on PRs. (#855)
  • Update year range in copyright headers. (#854)
pyface - Pyface 7.2.0

Published by aaronayres35 almost 4 years ago

Pyface 7.2.0 is a minor release which introduces a variety of bug fixes,
documentation updates, and other code maintenance. The most significant change
introduced by this release is the addition of undo/redo functionality from the
undo subpackage copied from apptools.

This release should still be compatible with Traits 6.0+. Users are encouraged
to upgrade to Traits 6.1+ to stay current as future releases of Pyface will
stop supporting Traits 6.0.

Highlights of this release

  • New :mod:undo <pyface.undo> subpackage that has been copied over from
    apptools (soon to be deprecated in apptools)

Detailed changes

Thanks to:

  • Aaron Ayres
  • Mark Dickinson
  • Kit Yan Choi
  • Rahul Poruri
  • Corran Webster

Features

  • Copy Undo over from apptools (#813)

Fixes

  • Add wx_id parameter to init for Tree to avoid errors (#810)
  • Fix Qt widget visibility (#807)
  • Fix sporadic Timer test failure on OSX + Qt (#799)
  • Fix invalid escape sequence deprecation warning at compile time (#788)

Build and continuous integration

  • Remove macOS builds from Travis CI configuration (#820)
  • Run pip install with no deps (#792)
  • Don't install traitsui from git source (#787)

Documentation

  • Add installation instruction on README (#797)
  • Fix code formatting in timers docs (#794)
  • Rename version folders for built documentation (#783)

Maintenance and code organization

  • Delete unused requirements file (#817)
  • Dont include ALL txt files from root directory (#816)
  • Log debug message if import PythonShell and PythonEditor fail in api.py (#801)
  • Make pygments optional for pyface.api (#796)
  • Use importlib_resources instead of pkg_resources for resource files (#791)
  • Use importlib_metadata instead of pkg_resources for toolkit entry points (#790)
pyface - Pyface 7.1.0

Published by kitchoi about 4 years ago

Pyface 7.1.0 introduces a few new features and fixes to deprecation warnings.
There are also internal cleanups to Qt signal connection logic that should be invisible to users.

Highlights of this release

  • A new pyface.data_view subpackage has been introduced to support visualization of hierarchical and non-hierarchical tabular data. See Pyface DataViews section of the user manual for an introduction. Additional examples are also added to the source distribution. Please note that as of this release the API is provisional.

  • A new pyface.color.Color class and a corresponding pyface.ui_traits.PyfaceColor trait type have been
    introduced to support representing colors via a toolkit independent API. See Trait Types section of the user manual for further details.

Detailed changes

More than 70 PRs went into this release. Thanks to:
Aaron Ayres, Ieva Cernyte, Mark Dickinson, Kit Yan Choi, Rahul Poruri, Corran Webster

Note that the following list is not exhaustive. Some PRs references have been omitted.

Features

  • Add pyface.data_view subpackage for visualizing hierarchical and non-hierarchical data. (#619, #661, #682, #683, #694, #709)
  • Add Color and PyfaceColor trait type. (#608, #710, #703)

Fixes

  • Use availableGeometry for screen size in Qt to match TraitsUI behavior (#727)
  • Fix deprecation warnings from Qt SystemMetrics (#719)
  • Fix QFontMetrics.width deprecation warning. (#715)
  • Remove border for heading text in Qt. (#692)
  • Replacing ListItemAttr with ItemAttr to avoid deprecation warning. (#670)
  • Fix wx/linux clipboard test failures. (#676)

Build and continuous integration

  • Add CI job targeting traits 6.0. (#656)
  • Fix extras_requires for PyQt5. (#659)
  • Updated edm version in travis and appveyor config files. (#618)

Documentation

  • Add documentation for the new PyfaceColor trait and Color class. (#710)
  • Add documentation for DataView. (#543, #574, #763)
  • Remove all enaml examples. (#652)
  • Fix some Sphinx warnings while building documentation. (#769)

Maintenance and code organization

  • Disconnect slots to Qt signals when cleaning up widgets. (#536, #542, #540)
  • Disconnect trait change handlers when cleaning up ApplicationWindow widgets. (#541)
  • Remove conditionals on python version. (#635)
  • Remove a print call in test. (#657)
  • Remove all of the u prefix on strings. (#604)
  • Use collections.abc instead of collections. (#477)
  • Use unittest discover for running tests. (#515)
pyface - Pyface 7.0.1

Published by kitchoi over 4 years ago

This is a bugfix release which fixes a number of minor issues with the 7.0.0
release.

Thanks to:
Aaron Ayres, Kit Choi, Rahul Poruri, Pedro Rivotti, Corran Webster.

Fixes

  • Fix copyright header in AboutDialog. (#573)
  • Fix dock pane layout on Qt5. (#545)
  • Fix errors from incorrect QImage memory management. (#546)
  • Fix CodeWidget handling of parsed tokens which caused TraitsUI CodeEditor to
    fail when a different lexer was chosen (#566).
pyface - Pyface 7.0.0

Published by corranwebster over 4 years ago

Pyface 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. It also updates the code to use new
features of Traits 6, and just like Traits 6, this release drops support
for Python 2.

The release includes many bugfixes and a number of smaller incremental
enhancements. Other than the changed dependencies, Pyface 6 code should
largely work unmodified under Pyface 7.

Thanks to:

David Baddeley, Mark Dickinson, Matt Hancock, Petr Kungurtsev, Midhun
Madhusoodanan, Rob McMullen, Shoeb Mohammed, Rahul Poruri, Roberto Preste,
reckoner, Jan von Rickenbach, Chiranth Siddappa, Joris Vankerschaver,
Corran Webster.

Change summary

Enhancements

  • Use Traits 6 features (#480, #494)
  • WxPython 4 support (#469, #473, #497, #499)
  • Remove six and other Python 2 code (#493)
  • Add utility functions for Qt images (#498)
  • Allow live update of Action images (#484)
  • Add Qt Multimedia APIs to pyface.qt (#485)
  • Allow additional copyright notices in the AboutDialog class (#467)
  • Replace default AboutDialog and Splashscreen images with Python logo (#454)
  • Allow etstool.py to run in non EDM environments (#443)
  • Add assertEventuallyTrueInGui method to GuiTestAssistant (#419)

Fixes

  • Avoid imports of Wx in interface classes (#500)
  • Code style cleanup (#490, #491)
  • Documentation fixes (#468)
  • SplitEditorAreaPane context menu cleanup (#435)
  • Remove deprecated Traits features (#457, #460)
  • Better Python 3 compatibility (#438, #455, #461, #477, #479)
  • Improved Qt support (#452)
  • Fix relative imports for Wx tasks (#448)
  • Ensure close button and escape key close message dialogs in Qt (#441)
  • Don't show context help button in Windows dialogs (#440)
  • Test improvements (#436)
pyface - Pyface 6.1.0

Published by corranwebster over 5 years ago

This release introduces a number of new features and bugfixes. The most prominent of these is a set of Application classes designed to smooth the transition between Tasks applications which use only Pyface, and those that take advantage of the Envisage plug-in framework. Developers can now write a Pyface TasksApplication and then easily transition to an Envisage TasksApplication as the needs of their codebase grows. This feature has been a few years in development, and thanks is due to Jonathan Rocher for helping push this through to completion.

This release also includes a complete re-write of the Pyface timer code to make it easier to use and to provide a consistent and more Pythonic API shared by the different back-ends. A backwards compatible API is still available, but users of the Pyface timer code are encouraged to update to the new API.

ToolBars can now embed simple widgets, such as text fields, integer spinners, and comboboxes, as well as simple TraitsUI views. This is provided via a new "widget" style for Actions as well as the utility subclasses FieldAction and TraitsUIWidgetAction.

Although not visible to most users of Pyface, this release removes the use of 2to3 and now uses a unified codebase supported by the six library. Thanks to Rahul Poruri for performing this transformation. This should help significantly with ongoing development work in the coming years.

We also include experimental support for PySide2 (also called "Qt for Python"). We are running CI tests using the 5.11 release of PySide2 with success on OS X and Linux for Python 3, but are experiencing failures with the 5.12 release.

Finally, this release includes a number of bugfixes and minor enhancements which should improve the reliability and utility of the codebase.

Thanks to:

Martin Bergtholdt, Mark Dickinson, Robert Kern, Eric Larson, Gregory Lee,
Eric McDonald, Rahul Poruri, Jonathan Rocher, Hamdi Sahloul, Roger Serwy,
Brian Teague, Corran Webster, John Wiggins.

Apologies to any contributors that have been omitted.

Change summary

Enhancements

  • Application classes (#334, #355, #345)
  • New API for Timers (#340, #365)
  • Support simple widgets in toolbars (#359, #360, #368)
  • Experimental support of Pyside2 (#318, #335, #358)
  • Support single codebase for Python 2 and 3 (#322, #351, #369, #370)
  • Support ui dispatch for Traits even if TraitsUI not available (#363)

Fixes

  • Fix context menu behaviour (#356)
  • Remove TraitsUI dependency in GuiTestAssistant (#366)
  • Fixes for ProgressDialog (#357)
  • Fixes for toolbar and statusbar life cycles (#332)
  • Fixes for CI (#342)
  • Fix usages of event_loop() in tests (#336)
  • Fix SplitEditorAreaPane tab dragging on Qt5 (#327)
  • Fix resource warnings in test suite from un-closed files (#326)
  • Remove uses of deprecated HasTraits.set() method (#320)
  • Add Qt5 support for deprecated Qt Style options that Mayavi needs (#323)
  • Various fixes around Qt API selection (#319, #344, #347, #371, #376, #381)
  • Fixes for setup.py (#380)
Package Rankings
Top 1.51% on Pypi.org
Top 34.56% on Anaconda.org