# Introduction

Taurus was originally conceived as a library for connecting client side applications (CLIs and GUIs) to Tango device servers. Since v4.0 the Taurus core became control-system agnostic, and it supports other control systems (such as EPICS) and data sources.

Note

due to its Tango origin, this documentation will tend to use many Tango-related examples. We intend to gradually introduce more non-Tango examples

Taurus was developed within the Sardana project, but since it has been found useful for other projects not related to Sardana, it has been moved to a separate project (although both projects are kept in sync and share most of their developers).

Taurus uses the Model-View-Controller (MVC) pattern to build interfaces.

The `taurus.core` module uses plugins (known as schemes) to provide TaurusModel objects that abstract the interactions with specific sources of data and/or control objects. Some schemes are already implemented for accessing control system libraries (the “tango” and “epics” schemes) as well as for data-processing via a Python interpreter (the “evaluation” scheme). See the taurus core tutorial for more information on the taurus core.

The Taurus view and controller components are typically implemented as PyQt based GUIs, but it may also consist on command line interfaces such as Sardana’s spock.

The `taurus.qt` module provides a set of basic widgets (labels, LEDs, editors, forms, plots, tables, buttons, synoptics,…) that extend related Qt widgets with the capability of attaching to Taurus core models in order to display and/or change their data in pre-defined ways. For example, a TaurusPlot widget will display a curve for each attribute model to which it is attached if its value is a one-dimensional numerical array. Similarly, a TaurusForm widget will allow the user to interact with the data represented by its attached models. The actual association of a view (widget) with a model is done by providing the model name to the widget.

The following is an example on how to create a widget that allows to interact with four attributes (state, position, velocity, acceleration) of a Tango device (motor/icepap/01):

    import sys
    from taurus.qt.qtgui.panel import TaurusForm
    from taurus.qt.qtgui.application import TaurusApplication

    app = TaurusApplication(sys.argv, cmd_line_parser=None)

    attrs = [ 'state', 'position', 'velocity', 'acceleration' ]
    model = [ 'motor/icepap/01/%s' % attr for attr in attrs ]

    w = TaurusForm()
    w.model = model
    w.show()
    sys.exit(app.exec_())

The GUI resulting from the above code

The above example can even be achieved even without typing any code:

    % cd taurus/qt/qtgui/panel
    % taurus form motor/icepap/01/state motor/icepap/01/position motor/icepap/01/velocity

For many more examples, See the Examples page.

Taurus is a pure-python module, but it makes heavy use of PyTango, numpy, PyQt, etc. to provide good performance even when large amounts of data are involved.