

.. _sphx_glr_gallery_user_interfaces_embedding_in_qt4_sgskip.py:


================
Embedding In QT4
================

Simple Qt4 application embedding Matplotlib canvases

Copyright (C) 2005 Florent Rougon
              2006 Darren Dale

This file is an example program for Matplotlib. It may be used and
modified with no restriction; raw copies as well as modified versions
may be distributed without limitation.



.. code-block:: python


    from __future__ import unicode_literals
    import os
    import random
    import sys

    from numpy import arange, sin, pi

    import matplotlib
    matplotlib.use("Qt4Agg")
    from matplotlib.backends.backend_qt4agg import (
        FigureCanvasQTAgg as FigureCanvas)
    from matplotlib.backends.qt_compat import QtCore, QtGui
    from matplotlib.figure import Figure

    progname = os.path.basename(sys.argv[0])


    class MyMplCanvas(FigureCanvas):
        """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""

        def __init__(self, parent=None, width=5, height=4, dpi=100):
            fig = Figure(figsize=(width, height), dpi=dpi)
            self.axes = fig.add_subplot(111)

            self.compute_initial_figure()

            FigureCanvas.__init__(self, fig)
            self.setParent(parent)

            FigureCanvas.setSizePolicy(self,
                                       QtGui.QSizePolicy.Expanding,
                                       QtGui.QSizePolicy.Expanding)
            FigureCanvas.updateGeometry(self)

        def compute_initial_figure(self):
            pass


    class MyStaticMplCanvas(MyMplCanvas):
        """Simple canvas with a sine plot."""

        def compute_initial_figure(self):
            t = arange(0.0, 3.0, 0.01)
            s = sin(2*pi*t)
            self.axes.plot(t, s)


    class MyDynamicMplCanvas(MyMplCanvas):
        """A canvas that updates itself every second with a new plot."""

        def __init__(self, *args, **kwargs):
            MyMplCanvas.__init__(self, *args, **kwargs)
            timer = QtCore.QTimer(self)
            timer.timeout.connect(self.update_figure)
            timer.start(1000)

        def compute_initial_figure(self):
            self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')

        def update_figure(self):
            # Build a list of 4 random integers between 0 and 10 (both inclusive)
            l = [random.randint(0, 10) for i in range(4)]
            self.axes.cla()
            self.axes.plot([0, 1, 2, 3], l, 'r')
            self.draw()


    class ApplicationWindow(QtGui.QMainWindow):
        def __init__(self):
            QtGui.QMainWindow.__init__(self)
            self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
            self.setWindowTitle("application main window")

            self.file_menu = QtGui.QMenu('&File', self)
            self.file_menu.addAction('&Quit', self.fileQuit,
                                     QtCore.Qt.CTRL + QtCore.Qt.Key_Q)
            self.menuBar().addMenu(self.file_menu)

            self.help_menu = QtGui.QMenu('&Help', self)
            self.menuBar().addSeparator()
            self.menuBar().addMenu(self.help_menu)

            self.help_menu.addAction('&About', self.about)

            self.main_widget = QtGui.QWidget(self)

            l = QtGui.QVBoxLayout(self.main_widget)
            sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
            dc = MyDynamicMplCanvas(self.main_widget, width=5, height=4, dpi=100)
            l.addWidget(sc)
            l.addWidget(dc)

            self.main_widget.setFocus()
            self.setCentralWidget(self.main_widget)

            self.statusBar().showMessage("All hail matplotlib!", 2000)

        def fileQuit(self):
            self.close()

        def closeEvent(self, ce):
            self.fileQuit()

        def about(self):
            QtGui.QMessageBox.about(self, "About",
                                    """embedding_in_qt4.py example
    Copyright 2005 Florent Rougon, 2006 Darren Dale

    This program is a simple example of a Qt4 application embedding matplotlib
    canvases.

    It may be used and modified with no restriction; raw copies as well as
    modified versions may be distributed without limitation."""
                                    )


    qApp = QtGui.QApplication(sys.argv)

    aw = ApplicationWindow()
    aw.setWindowTitle("%s" % progname)
    aw.show()
    sys.exit(qApp.exec_())
    #qApp.exec_()

**Total running time of the script:** ( 0 minutes  0.000 seconds)



.. container:: sphx-glr-footer


  .. container:: sphx-glr-download

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



  .. container:: sphx-glr-download

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

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

    `Generated by Sphinx-Gallery <https://sphinx-gallery.readthedocs.io>`_
