
# embedding_in_qt5.py --- Simple Qt5 application embedding matplotlib canvases## Copyright (C) 2005 Florent Rougon# 2006 Darren Dale# 2015 Jens H Nielsen## 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.from__future__importunicode_literalsimportsysimportosimportrandomimportmatplotlib# Make sure that we are using QT5matplotlib.use('Qt5Agg')fromPyQt5importQtCore,QtWidgetsfromnumpyimportarange,sin,pifrommatplotlib.backends.backend_qt5aggimportFigureCanvasQTAggasFigureCanvasfrommatplotlib.figureimportFigureprogname=os.path.basename(sys.argv[0])progversion="0.1"classMyMplCanvas(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,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding)FigureCanvas.updateGeometry(self)defcompute_initial_figure(self):passclassMyStaticMplCanvas(MyMplCanvas):"""Simple canvas with a sine plot."""defcompute_initial_figure(self):t=arange(0.0,3.0,0.01)s=sin(2*pi*t)self.axes.plot(t,s)classMyDynamicMplCanvas(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)defcompute_initial_figure(self):self.axes.plot([0,1,2,3],[1,2,0,4],'r')defupdate_figure(self):# Build a list of 4 random integers between 0 and 10 (both inclusive)l=[random.randint(0,10)foriinrange(4)]self.axes.cla()self.axes.plot([0,1,2,3],l,'r')self.draw()classApplicationWindow(QtWidgets.QMainWindow):def__init__(self):QtWidgets.QMainWindow.__init__(self)self.setAttribute(QtCore.Qt.WA_DeleteOnClose)self.setWindowTitle("application main window")self.file_menu=QtWidgets.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=QtWidgets.QMenu('&Help',self)self.menuBar().addSeparator()self.menuBar().addMenu(self.help_menu)self.help_menu.addAction('&About',self.about)self.main_widget=QtWidgets.QWidget(self)l=QtWidgets.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)deffileQuit(self):self.close()defcloseEvent(self,ce):self.fileQuit()defabout(self):QtWidgets.QMessageBox.about(self,"About","""embedding_in_qt5.py exampleCopyright 2005 Florent Rougon, 2006 Darren Dale, 2015 Jens H NielsenThis program is a simple example of a Qt5 application embedding matplotlibcanvases.It may be used and modified with no restriction; raw copies as well asmodified versions may be distributed without limitation.This is modified from the embedding in qt4 example to show the differencebetween qt4 and qt5""")qApp=QtWidgets.QApplication(sys.argv)aw=ApplicationWindow()aw.setWindowTitle("%s"%progname)aw.show()sys.exit(qApp.exec_())#qApp.exec_()
Keywords: python, matplotlib, pylab, example, codex (seeSearch examples)