# Tool Bar Example

An example of the `ToolBar` widget.

This example demonstrates the use of the `ToolBar` widget. A `ToolBar` can have an arbitrary number of children, which must be `Action` widgets. In this fashion, a `ToolBar` is very similar to a `Menu` in a `MenuBar`. The `ToolBar` also supports `ActionGroup` widgets in the same manner as a `Menu`. A `ToolBar` is typically used as a child of a `MainWindow`, but it can also used as a child of a `Container` and layed out using constraints.

Implementation Notes:

> The tool bar facilities in Wx are very weak. Due to technical limitations, the `ToolBar` widget in Wx does not have the slick docking features which are available in Qt. It also does not look nice when used as the child of a `Container`. If a `ToolBar` is required for a particular application, strongly prefer the Qt backend over Wx (this is generally a good life-rule).

Tip

To see this example in action, download it from `tool_bar` and run:

    $ enaml-run tool_bar.enaml

## Screenshot

## Example Enaml Code

    #------------------------------------------------------------------------------
    # Copyright (c) 2013-2025, Nucleic Development Team.
    #
    # Distributed under the terms of the Modified BSD License.
    #
    # The full license is in the file LICENSE, distributed with this software.
    #------------------------------------------------------------------------------
    """ An example of the `ToolBar` widget.

    This example demonstrates the use of the `ToolBar` widget. A `ToolBar`
    can have an arbitrary number of children, which must be `Action` widgets.
    In this fashion, a `ToolBar` is very similar to a `Menu` in a `MenuBar`.
    The `ToolBar` also supports `ActionGroup` widgets in the same manner as
    a `Menu`. A `ToolBar` is typically used as a child of a `MainWindow`,
    but it can also used as a child of a `Container` and layed out using
    constraints.

    Implementation Notes:

        The tool bar facilities in Wx are very weak. Due to technical
        limitations, the `ToolBar` widget in Wx does not have the slick
        docking features which are available in Qt. It also does not
        look nice when used as the child of a `Container`. If a `ToolBar`
        is required for a particular application, strongly prefer the
        Qt backend over Wx (this is generally a good life-rule).

    << autodoc-me >>
    """
    from __future__ import print_function
    from enaml.layout.api import vbox
    from enaml.widgets.api import (
        MainWindow, ToolBar, Action, ActionGroup, Container, Html
    )

    enamldef MyToolBar(ToolBar):
        Action:
            text = 'Button'
            tool_tip = text
        ActionGroup:
            Action:
                separator = True
            Action:
                checkable = True
                text = 'Exclusive'
                triggered :: print('triggered')
                toggled :: print('toggled')
            Action:
                checkable = True
                text = 'ToolBar'
            Action:
                checkable = True
                text = 'Buttons'
            Action:
                separator = True
        Action:
            checkable = True
            text = 'Checkable'
        Action:
            checkable = True
            text = 'ToolBar'
        Action:
            checkable = True
            text = 'Buttons'

    enamldef Main(MainWindow):
        MyToolBar:
            pass
        Container:
            constraints = [vbox(html, tbar, spacing=0)]
            Html: html:
                source = '<h1><center>Hello World!</center></h1>'
            MyToolBar: tbar:
                pass