The GUIApplication subclass of the standard Envisage Application class uses PyFace’s cross-platform GUI tools to ensure that an appropriate back-end application object is instantiated before plugins run their start() methods, and then ensures that the GUI mainloop is started after the start() methods have successfully completed.

This allows developers to have a single place to start the application, but have plugins to listen for the application_initialized event to create UI components. In particular, Traits UIs can be created in an event listener method by calling edit_traits(), something like this:

class MyViewPlugin(Plugin):

    model = Instance

    ui = Instance('traitsui.ui.UI')

    def create_ui(self):
        # we need to keep a reference to the ui object
        self.ui = self.model.edit_traits()

This is intended to be a cheap and simple way to take an existing application and start “lifting” it to Envisage, without having to use a more heavyweight UI framework such as Tasks immediately. Developers can work on adding extensibility to the application’s model without having to at the same time add extensibility to their UI.

The GUIApplication exposes the following public API:


The PyFace GUI instance the GUIApplication creates.


An optional PyFace ISplashScreen that gets shown while the plugins are started.


An event which is fired after the UI mainloop has started.