
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "gallery/user_interfaces/embedding_in_wx3_sgskip.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. meta::
        :keywords: codex

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_gallery_user_interfaces_embedding_in_wx3_sgskip.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_gallery_user_interfaces_embedding_in_wx3_sgskip.py:


==============
Embed in wx #3
==============

Copyright (C) 2003-2004 Andrew Straw, Jeremy O'Donoghue and others

License: This work is licensed under the PSF. A copy should be included
with this source code, and is also available at
https://docs.python.org/3/license.html

This is yet another example of using matplotlib with wx.  Hopefully
this is pretty full-featured:

- both matplotlib toolbar and WX buttons manipulate plot
- full wxApp framework, including widget interaction
- XRC (XML wxWidgets resource) file to create GUI (made with XRCed)

This was derived from embedding_in_wx and dynamic_image_wxagg.

Thanks to matplotlib and wx teams for creating such great software!

.. GENERATED FROM PYTHON SOURCE LINES 23-147

.. code-block:: Python


    import wx
    import wx.xrc as xrc

    import numpy as np

    from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
    from matplotlib.backends.backend_wxagg import \
        NavigationToolbar2WxAgg as NavigationToolbar
    import matplotlib.cbook as cbook
    import matplotlib.cm as cm
    from matplotlib.figure import Figure

    ERR_TOL = 1e-5  # floating point slop for peak-detection


    class PlotPanel(wx.Panel):
        def __init__(self, parent):
            super().__init__(parent, -1)

            self.fig = Figure((5, 4), 75)
            self.canvas = FigureCanvas(self, -1, self.fig)
            self.toolbar = NavigationToolbar(self.canvas)  # matplotlib toolbar
            self.toolbar.Realize()

            # Now put all into a sizer
            sizer = wx.BoxSizer(wx.VERTICAL)
            # This way of adding to sizer allows resizing
            sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
            # Best to allow the toolbar to resize!
            sizer.Add(self.toolbar, 0, wx.GROW)
            self.SetSizer(sizer)
            self.Fit()

        def init_plot_data(self):
            ax = self.fig.add_subplot()

            x = np.arange(120.0) * 2 * np.pi / 60.0
            y = np.arange(100.0) * 2 * np.pi / 50.0
            self.x, self.y = np.meshgrid(x, y)
            z = np.sin(self.x) + np.cos(self.y)
            self.im = ax.imshow(z, cmap=cm.RdBu, origin='lower')

            zmax = np.max(z) - ERR_TOL
            ymax_i, xmax_i = np.nonzero(z >= zmax)
            if self.im.origin == 'upper':
                ymax_i = z.shape[0] - ymax_i
            self.lines = ax.plot(xmax_i, ymax_i, 'ko')

            self.toolbar.update()  # Not sure why this is needed - ADS

        def GetToolBar(self):
            # You will need to override GetToolBar if you are using an
            # unmanaged toolbar in your frame
            return self.toolbar

        def OnWhiz(self, event):
            self.x += np.pi / 15
            self.y += np.pi / 20
            z = np.sin(self.x) + np.cos(self.y)
            self.im.set_array(z)

            zmax = np.max(z) - ERR_TOL
            ymax_i, xmax_i = np.nonzero(z >= zmax)
            if self.im.origin == 'upper':
                ymax_i = z.shape[0] - ymax_i
            self.lines[0].set_data(xmax_i, ymax_i)

            self.canvas.draw()


    class MyApp(wx.App):
        def OnInit(self):
            xrcfile = cbook.get_sample_data('embedding_in_wx3.xrc',
                                            asfileobj=False)
            print('loading', xrcfile)

            self.res = xrc.XmlResource(xrcfile)

            # main frame and panel ---------

            self.frame = self.res.LoadFrame(None, "MainFrame")
            self.panel = xrc.XRCCTRL(self.frame, "MainPanel")

            # matplotlib panel -------------

            # container for matplotlib panel (I like to make a container
            # panel for our panel so I know where it'll go when in XRCed.)
            plot_container = xrc.XRCCTRL(self.frame, "plot_container_panel")
            sizer = wx.BoxSizer(wx.VERTICAL)

            # matplotlib panel itself
            self.plotpanel = PlotPanel(plot_container)
            self.plotpanel.init_plot_data()

            # wx boilerplate
            sizer.Add(self.plotpanel, 1, wx.EXPAND)
            plot_container.SetSizer(sizer)

            # whiz button ------------------
            whiz_button = xrc.XRCCTRL(self.frame, "whiz_button")
            whiz_button.Bind(wx.EVT_BUTTON, self.plotpanel.OnWhiz)

            # bang button ------------------
            bang_button = xrc.XRCCTRL(self.frame, "bang_button")
            bang_button.Bind(wx.EVT_BUTTON, self.OnBang)

            # final setup ------------------
            self.frame.Show()

            self.SetTopWindow(self.frame)

            return True

        def OnBang(self, event):
            bang_count = xrc.XRCCTRL(self.frame, "bang_count")
            bangs = bang_count.GetValue()
            bangs = int(bangs) + 1
            bang_count.SetValue(str(bangs))


    if __name__ == '__main__':
        app = MyApp()
        app.MainLoop()


.. _sphx_glr_download_gallery_user_interfaces_embedding_in_wx3_sgskip.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: embedding_in_wx3_sgskip.ipynb <embedding_in_wx3_sgskip.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: embedding_in_wx3_sgskip.py <embedding_in_wx3_sgskip.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: embedding_in_wx3_sgskip.zip <embedding_in_wx3_sgskip.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
