Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.

Pyface: Traits-capable Windowing Framework

The Pyface project contains a toolkit-independent GUI abstraction layer, which is used to support the "visualization" features of the Enthought Tool Suite libraries. Pyface contains Traits-aware wrappers of standard GUI elements such as Windows, Dialogs and Fields, together with the "Tasks" application framework which provides a rich GUI experience with dock panes, tabbed editors, and so forth. This permits you to write cross-platform interactive GUI code without needing to use the underlying GUI backend.

The following GUI backends are supported:

  • PySide2 (stable) and PySide6 (experimental)
  • PyQt5 (stable) and PyQt6 (in development)
  • wxPython 4 (experimental)


The following code creates a window with a simple Python shell:

from pyface.api import ApplicationWindow, GUI, IPythonShell

class MainWindow(ApplicationWindow):
    """ The main application window. """

    #: The PythonShell that forms the contents of the window
    shell = Instance(IPythonShell, allow_none=False)

    def _create_contents(self, parent):
        """ Create the editor. """

    def destroy(self):

    def _shell_default(self):
        from pyface.api import PythonShell
        return PythonShell()

# Application entry point.
if __name__ == "__main__":
    # Create the GUI.
    gui = GUI()

    # Create and open the main window.
    window = MainWindow(title="Python Shell", size=(640, 480))

    # Start the GUI event loop!

A Pyface GUI window containing a Python shell.


Pyface is a pure Python package. In most cases Pyface will be installable using a simple pip install command.

To install with a backend, choose one of the following, as appropriate:

$ pip install pyface[pyside2]

$ pip install pyface[pyside6]

$ pip install pyface[pyqt5]

$ pip install pyface[wx]

Some optional functionality uses pillow and numpy and these can be installed using optional dependencies:

$ pip install pyface[pillow]

$ pip install pyface[numpy]

For running tests a few more packages are required:

$ pip install pyface[test]


Developing Pyface

The script provides utilities to assist developers wanting to work on Pyface. To use it, you will need to have the source checked out via Git, Enthought's EDM distribution manager, and a minimal environment containing at least the Click library.

You can then follow the instructions in In particular:

  • use install to create environments for particular toolkits and runtimes
  • use shell to activate those environments
  • use test to run the tests in those environments
  • use flake8 to perform style checks
  • use docs to build the documentation
  • use test-all to run the tests across all supported runtimes and toolkits


Pyface source code is licensed with a BSD-style license. Some default images are licensed with other licenses. See the license files for further information.