Overview -------- An |Enaml| application consists of regular Python code, and *.enaml* files. A .enaml file describes a GUI as a tree of elements. Each element has associated attributes and an optional identifier. **Attributes** customize the layout and behaviour of an application, and **identifiers** allow Python code to access widgets by name. |Enaml| parses a hierarchical file (.enaml), then renders it with an available GUI toolkit. |Enaml| abstracts away toolkit-specific details. Goals ^^^^^ The goals of the |Enaml| project are to: - Help **separate** the presentation and content (i.e., MVC) - Allow a **single** script to work across *multiple* widget toolkits when using the default interfaces. - Be **extensible** and allow adaptation and addition of the base widgets with little effort. - Integrate well with `Traits `_ - Have the ability to integrate with other model frameworks which support the observer pattern. .. _dependencies: Prerequisites ^^^^^^^^^^^^^ Enaml is developed using `Python `_ 2.7 and requires recent (2012-current) versions of the following libraries: *Required*: - `Traits `_ - At least one backend toolkit: - `PySide `_ - `PyQt4 `_ - `wxPython `_ with a recent (> 0.9.1) `agw `_ library (only supported on Windows) - `PLY `_ (Python Lex-Yacc), for parsing *.enaml* files - `casuarius `_ linear constraint solver. - `distribute `_ (package installation) *Optional*: - `Graphviz `_ (used for documentation) Installation ^^^^^^^^^^^^ To install the package please check out `the source from github `_ Then install with:: python setup.py install Alternatively you can work in developing mode:: python setup.py develop Enaml ships with optional high performance C++ extensions. To build them, an enviroment variable must be set before running ``setup.py`` On Windows:: set BUILD_ENAML_EXTENSIONS=1 On OSX or Linux:: export BUILD_ENAML_EXTENSIONS=1