#!/usr/bin/env python
# The Python version of qwt-*/examples/curvdemo2/curvdemo2.cpp,
# using curveData() instead of the un-Pythonic setRawData().
import sys
from qt import *
from qwt import *
from Numeric import *
Size=15
USize=13
class CurveDemo(QFrame):
def __init__(self, *args):
apply(QFrame.__init__, (self,) + args)
self.setFrameStyle(QFrame.Box | QFrame.Raised)
self.setLineWidth(2)
self.setMidLineWidth(3)
p = QPalette()
p.setColor(QPalette.Normal, QColorGroup.Background, QColor(30,30,50))
self.setPalette(p)
# make curves and maps
self.tuples = []
# curve 1
curve = QwtCurve()
curve.setPen(QPen(QColor(150, 150, 200), 2))
curve.setStyle(QwtCurve.Spline, QwtCurve.Xfy),
curve.setSymbol(QwtSymbol(
QwtSymbol.Cross, QBrush(), QPen(Qt.yellow, 2), QSize(7, 7)))
self.tuples.append((curve,
QwtDiMap(0, 100, -1.5, 1.5, False),
QwtDiMap(0, 100, 0.0, 2*pi, False)))
# curve 2
curve = QwtCurve()
curve.setPen(QPen(QColor(200, 150, 50), 1, Qt.DashDotDotLine))
curve.setStyle(QwtCurve.Sticks)
curve.setSymbol(QwtSymbol(
QwtSymbol.Ellipse, QBrush(Qt.blue), QPen(Qt.yellow), QSize(5, 5)))
self.tuples.append((curve,
QwtDiMap(0, 100, 0.0, 2*pi, False),
QwtDiMap(0, 100, -3.0, 1.1, False)))
# curve 3
curve = QwtCurve()
curve.setPen(QPen(QColor(100, 200, 150)))
curve.setStyle(
QwtCurve.Spline, QwtCurve.Periodic | QwtCurve.Parametric)
self.tuples.append((curve,
QwtDiMap(0, 100, -1.1, 3.0, False),
QwtDiMap(0, 100, -1.1, 3.0, False)))
# curve 4
curve = QwtCurve()
curve.setPen(QPen(Qt.red))
curve.setStyle(QwtCurve.Spline)
curve.setSplineSize(200)
self.tuples.append((curve,
QwtDiMap(0, 100, -5.0, 1.1, False),
QwtDiMap(0, 100, -1.1, 5.0, False)))
# data
self.phase = 0.0
self.base = arrayrange(0.0, 2.01*pi, 2*pi/(USize-1))
self.uval = cos(self.base)
self.vval = sin(self.base)
self.uval[1::2] *= 0.5
self.vval[1::2] *= 0.5
self.newValues()
# start timer
self.tid = self.startTimer(250)
def drawContents(self, painter):
r = self.contentsRect()
for curve, xMap, yMap in self.tuples:
xMap.setIntRange(r.left(), r.right())
yMap.setIntRange(r.top(), r.bottom())
curve.draw(painter, xMap, yMap)
def timerEvent(self, event):
self.newValues()
self.repaint()
def newValues(self):
phase = self.phase
self.xval = arrayrange(0, 2.01*pi, 2*pi/(Size-1))
self.yval = sin(self.xval - phase)
self.zval = cos(3*(self.xval + phase))
s = 0.25 * sin(phase)
c = sqrt(1.0 - s*s)
u = self.uval
self.uval = c*self.uval-s*self.vval
self.vval = c*self.vval+s*u
self.tuples[0][0].setData(self.yval, self.xval)
self.tuples[1][0].setData(self.xval, self.zval)
self.tuples[2][0].setData(self.yval, self.zval)
self.tuples[3][0].setData(self.uval, self.vval)
self.phase += 2*pi/100
if self.phase>2*pi:
self.phase = 0.0
def make():
demo = CurveDemo()
demo.resize(300, 300)
demo.show()
return demo
def main(args):
app = QApplication(args)
demo = make()
app.setMainWidget(demo)
app.exec_loop()
# Admire!
if __name__ == '__main__':
main(sys.argv)