#!/usr/bin/env python # The Python version of qwt-*/examples/data_plot/data_plot.cpp import random, sys from qt import * from qwt import * from Numeric import * class DataPlot(QwtPlot): def __init__(self, *args): QwtPlot.__init__(self, *args) # Initialize data self.x = arrayrange(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.setAutoLegend(True) self.curveR = self.insertCurve("Data Moving Right") self.curveL = self.insertCurve("Data Moving Left") self.setCurveSymbol(self.curveL, QwtSymbol( QwtSymbol.Ellipse, QBrush(), QPen(Qt.yellow), QSize(7, 7))) self.setCurvePen(self.curveR, QPen(Qt.red)) self.setCurvePen(self.curveL, QPen(Qt.blue)) mY = self.insertLineMarker("", QwtPlot.yLeft) self.setMarkerYPos(mY, 0.0) self.setAxisTitle(QwtPlot.xBottom, "Time (seconds)") self.setAxisTitle(QwtPlot.yLeft, "Values") self.startTimer(50) self.phase = 0.0 # __init__() 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.setCurveData(self.curveR, self.x, self.y) self.setCurveData(self.curveL, self.x, self.z) self.replot() self.phase += pi*0.02 # timerEvent() # class DataPlot def main(args): app = QApplication(args) demo = make() app.setMainWidget(demo) app.exec_loop() # main() def make(): demo = DataPlot() demo.resize(500, 300) demo.show() return demo # make() # Admire if __name__ == '__main__': main(sys.argv)