If you want to use it in the example section or anything else, you are welcome.
greetings Till #!/usr/bin/env python # embedding_in_qt4.py --- Simple Qt4 application embedding matplotlib canvases # It also shows, that normal plotting is quite slow. # # 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. import sys, os, random from PyQt4 import QtGui, QtCore from numpy import arange, sin, pi from numpy.random import randn, randint from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure progname = os.path.basename(sys.argv[0]) progversion = "0.1" 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) # We want the axes cleared every time plot() is called self.axes.hold(False) 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) self.timer = QtCore.QTimer(self) QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.update_figure) self.timer.start(1000) def compute_initial_figure(self): self.axes.plot(arange(4), randint(0, 10, 4), 'r') def update_figure(self): # Build a list of 4 random integers between 0 and 10 (both inclusive) l = randint(0, 10, 4) self.axes.plot(arange(1, 5), l, 'r') self.draw() def stop_timer(self): self.timer.stop() class MyBlittMplCanvas(MyMplCanvas): """"A canvas thats updates itself as fast a possible, using blitting.""" def __init__(self, *args, **kwargs): MyMplCanvas.__init__(self, *args, **kwargs) #self.draw() self.old_size = self.axes.bbox.width, self.axes.bbox.height self.ax_background = self.copy_from_bbox(self.axes.bbox) self.cnt = 0 self.axes.set_autoscale_on(False) #self.draw() self.timer=QtCore.QTimer() self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.update_figure) self.timer.start(0) def blit(self, bbox=None): self.replot = bbox l, b, w, h = bbox.bounds t = b + h self.repaint(l, self.renderer.height-t, w, h) def compute_initial_figure(self): self.t = arange(0.0, 3.0, 0.01) s = sin(2*pi*self.t)+randn(len(self.t)) self.line=self.axes.plot(self.t, s)[0] def update_figure(self): current_size = self.axes.bbox.width, self.axes.bbox.height if self.old_size != current_size: self.old_size = current_size self.axes.clear() self.axes.grid() self.draw() self.ax_background = self.copy_from_bbox(self.axes.bbox) self.restore_region(self.ax_background, bbox=self.axes.bbox) # update the data self.line.set_ydata(sin(2*pi*self.t)+randn(len(self.t))) # just draw the animated artist self.axes.draw_artist(self.line) # just redraw the axes rectangle self.blit(self.axes.bbox) 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) bc = MyBlittMplCanvas(self.main_widget, width=5, height=4, dpi=100) stopdc=QtGui.QPushButton("Stop dynamic Timer") self.connect(stopdc, QtCore.SIGNAL("clicked()"), dc.stop_timer) l.addWidget(sc) l.addWidget(dc) l.addWidget(stopdc) l.addWidget(bc) 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 %s" % progname, u"""%(prog)s version %(version)s Copyright \N{COPYRIGHT SIGN} 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.""" % {"prog": progname, "version": progversion}) qApp = QtGui.QApplication(sys.argv) aw = ApplicationWindow() aw.setWindowTitle("%s" % progname) aw.show() sys.exit(qApp.exec_()) #qApp.exec_() ------------------------------------------------------------------------------ This SF.Net email is sponsored by the Verizon Developer Community Take advantage of Verizon's best-in-class app development support A streamlined, 14 day to market process makes app distribution fast and easy Join now and get one step closer to millions of Verizon customers http://p.sf.net/sfu/verizon-dev2dev _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users