#!/usr/bin/env python # The Python version of Qwt-5.0.0/examples/data_plot # for debugging, requires: python configure.py --trace ... if False: import sip sip.settracemask(0x3f) import random import sys from PyQt4 import Qt import PyQt4.Qwt5 as Qwt from PyQt4.Qwt5.anynumpy import * class DataPlot(Qwt.QwtPlot): def __init__(self, *args): Qwt.QwtPlot.__init__(self, *args) self.setCanvasBackground(Qt.Qt.white) self.alignScales() # Initialize data self.x = arange(0.0, 100.1, 0.5) self.y = zeros(len(self.x), Float) self.z = zeros(len(self.x), Float) self.setTitle("A Moving QwtPlot Demonstration") self.insertLegend(Qwt.QwtLegend(), Qwt.QwtPlot.BottomLegend); self.curveR = Qwt.QwtPlotCurve("Data Moving Right") self.curveR.attach(self) self.curveL = Qwt.QwtPlotCurve("Data Moving Left") self.curveL.attach(self) self.curveL.setSymbol(Qwt.QwtSymbol(Qwt.QwtSymbol.Ellipse, Qt.QBrush(), Qt.QPen(Qt.Qt.yellow), Qt.QSize(7, 7))) self.curveR.setPen(Qt.QPen(Qt.Qt.red)) self.curveL.setPen(Qt.QPen(Qt.Qt.blue)) mY = Qwt.QwtPlotMarker() mY.setLabelAlignment(Qt.Qt.AlignRight | Qt.Qt.AlignTop) mY.setLineStyle(Qwt.QwtPlotMarker.HLine) mY.setYValue(0.0) mY.attach(self) self.setAxisTitle(Qwt.QwtPlot.xBottom, "Time (seconds)") self.setAxisTitle(Qwt.QwtPlot.yLeft, "Values") self.startTimer(50) self.phase = 0.0 # __init__() def alignScales(self): self.canvas().setFrameStyle(Qt.QFrame.Box | Qt.QFrame.Plain) self.canvas().setLineWidth(1) for i in range(Qwt.QwtPlot.axisCnt): scaleWidget = self.axisWidget(i) if scaleWidget: scaleWidget.setMargin(0) scaleDraw = self.axisScaleDraw(i) if scaleDraw: scaleDraw.enableComponent( Qwt.QwtAbstractScaleDraw.Backbone, False) # alignScales() def timerEvent(self, e): if self.phase > pi - 0.0001: self.phase = 0.0 # y moves from left to right: # shift y array right and assign new value y[0] self.y = concatenate((self.y[:1], self.y[:-1]), 1) self.y[0] = sin(self.phase) * (-1.0 + 2.0*random.random()) # z moves from right to left: # Shift z array left and assign new value to z[n-1]. self.z = concatenate((self.z[1:], self.z[:1]), 1) self.z[-1] = 0.8 - (2.0 * self.phase/pi) + 0.4*random.random() self.curveR.setData(self.x, self.y) self.curveL.setData(self.x, self.z) self.replot() self.phase += pi*0.02 # timerEvent() # class DataPlot def make(): demo = DataPlot() demo.resize(500, 300) demo.show() return demo # make() def main(args): app = Qt.QApplication(args) demo = make() sys.exit(app.exec_()) # main() # Admire if __name__ == '__main__': main(sys.argv) # Local Variables: *** # mode: python *** # End: ***