### Navigation

- index
- next |
- previous |
- Mayavi v3.3.0 documentation »
- Example gallery »

# Wx embedding example

This example shows to embed a Mayavi view in a wx frame.

The trick is to create a HasTraits object, as in the mlab_traits_ui.py, mayavi_traits_ui.py, or the modifying_mlab_source.py examples (Mlab traits ui example, Mayavi traits ui example, example_modifying_mlab_source).

Calling the edit_traits method returns a ui object whose control attribute is the wx widget. It can thus be embedded in a standard wx application.

In this example, the wx part is very simple. See example_wx_embed_in_notebook for an example of more complex embedding of Mayavi scenes in Wx applications.

Source code: wx_embedding.py

    from numpy import ogrid, sin

    from enthought.traits.api import HasTraits, Instance
    from enthought.traits.ui.api import View, Item

    from enthought.mayavi.sources.api import ArraySource
    from enthought.mayavi.modules.api import IsoSurface

    from enthought.tvtk.pyface.scene_editor import SceneEditor
    from enthought.mayavi.tools.mlab_scene_model import MlabSceneModel

    class MayaviView(HasTraits):

        scene = Instance(MlabSceneModel, ())

        # The layout of the panel created by Traits
        view = View(Item('scene', editor=SceneEditor(), resizable=True,
                        show_label=False),
                        resizable=True)

        def __init__(self):
            HasTraits.__init__(self)
            # Create some data, and plot it using the embedded scene's engine
            x, y, z = ogrid[-10:10:100j, -10:10:100j, -10:10:100j]
            scalars = sin(x*y*z)/(x*y*z)
            src = ArraySource(scalar_data=scalars)
            self.scene.engine.add_source(src)
            src.add_module(IsoSurface())

    #-----------------------------------------------------------------------------
    # Wx Code
    import wx

    class MainWindow(wx.Frame):

        def __init__(self, parent, id):
            wx.Frame.__init__(self, parent, id, 'Mayavi in Wx')
            self.mayavi_view = MayaviView()
            # Use traits to create a panel, and use it as the content of this
            # wx frame.
            self.control = self.mayavi_view.edit_traits(
                            parent=self,
                            kind='subpanel').control
            self.Show(True)

    app = wx.PySimpleApp()
    frame = MainWindow(None, wx.ID_ANY)
    app.MainLoop()

### Navigation

- index
- next |
- previous |
- Mayavi v3.3.0 documentation »
- Example gallery »