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

    Click :ref:`here <sphx_glr_download_gallery_user_interfaces_embedding_in_qt_sgskip.py>` to download the full example code
.. rst-class:: sphx-glr-example-title

.. _sphx_glr_gallery_user_interfaces_embedding_in_qt_sgskip.py:


===============
Embedding in Qt
===============

Simple Qt application embedding Matplotlib canvases.  This program will work
equally well using Qt4 and Qt5.  Either version of Qt can be selected (for
example) by setting the ``MPLBACKEND`` environment variable to "Qt4Agg" or
"Qt5Agg", or by first importing the desired version of PyQt.



.. code-block:: python


    import sys
    import time

    import numpy as np

    from matplotlib.backends.qt_compat import QtCore, QtWidgets, is_pyqt5
    if is_pyqt5():
        from matplotlib.backends.backend_qt5agg import (
            FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
    else:
        from matplotlib.backends.backend_qt4agg import (
            FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
    from matplotlib.figure import Figure


    class ApplicationWindow(QtWidgets.QMainWindow):
        def __init__(self):
            super(ApplicationWindow, self).__init__()
            self._main = QtWidgets.QWidget()
            self.setCentralWidget(self._main)
            layout = QtWidgets.QVBoxLayout(self._main)

            static_canvas = FigureCanvas(Figure(figsize=(5, 3)))
            layout.addWidget(static_canvas)
            self.addToolBar(NavigationToolbar(static_canvas, self))

            dynamic_canvas = FigureCanvas(Figure(figsize=(5, 3)))
            layout.addWidget(dynamic_canvas)
            self.addToolBar(QtCore.Qt.BottomToolBarArea,
                            NavigationToolbar(dynamic_canvas, self))

            self._static_ax = static_canvas.figure.subplots()
            t = np.linspace(0, 10, 501)
            self._static_ax.plot(t, np.tan(t), ".")

            self._dynamic_ax = dynamic_canvas.figure.subplots()
            self._timer = dynamic_canvas.new_timer(
                100, [(self._update_canvas, (), {})])
            self._timer.start()

        def _update_canvas(self):
            self._dynamic_ax.clear()
            t = np.linspace(0, 10, 101)
            # Shift the sinusoid as a function of time.
            self._dynamic_ax.plot(t, np.sin(t + time.time()))
            self._dynamic_ax.figure.canvas.draw()


    if __name__ == "__main__":
        qapp = QtWidgets.QApplication(sys.argv)
        app = ApplicationWindow()
        app.show()
        qapp.exec_()


.. _sphx_glr_download_gallery_user_interfaces_embedding_in_qt_sgskip.py:


.. only :: html

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



  .. container:: sphx-glr-download

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



  .. container:: sphx-glr-download

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


.. only:: html

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

    Keywords: matplotlib code example, codex, python plot, pyplot
    `Gallery generated by Sphinx-Gallery
    <https://sphinx-gallery.readthedocs.io>`_
