#!/usr/bin/env python # The Python version of qwt-*/examples/curvedemo1/curvdemo1.cpp # This examples demonstrate the use of keyword arguments in constructors, like: # # instance = ClassName(keyword1 = value1, keyword2 = value2, ..). # # Any method name can be used as a keyword. The value is a Python object, # whose type depend on the method name (the object can be a tuple, if the # method takes more than one argument). # # The keyword arguments feature is enabled by # post-processing sip-generated *.py files. # # Warning: this feature is a HACK, only working in constructors! # Qt's Designer and pyuic don't know about keyword arguments. # If you code by hand, keyword arguments allow for shorter code. import sys from qt import * from qwt import * from Numeric import * SIZE=27 class CurveDemo(QFrame): def __init__(self, *args): apply(QFrame.__init__, (self,) + args) self.setFrameStyle(QFrame.Box | QFrame.Raised) self.setLineWidth(2) self.setMidLineWidth(3) # make curves with different styles self.curves = [] # curve 0 curve = QwtCurve() curve.setPen(QPen(Qt.darkGreen)) curve.setStyle(QwtCurve.Spline) curve.setSymbol(QwtSymbol(QwtSymbol.Cross, QBrush(), QPen(Qt.black), QSize(5, 5))) self.curves.append(curve) # curve 1 curve = QwtCurve() curve.setPen(QPen(Qt.red)) curve.setStyle(QwtCurve.Sticks) curve.setSymbol(QwtSymbol(QwtSymbol.Ellipse, QBrush(Qt.yellow), QPen(Qt.blue), QSize(5, 5))) self.curves.append(curve) # curve 2 curve = QwtCurve() curve.setPen(QPen(Qt.darkBlue)) curve.setStyle(QwtCurve.Lines) self.curves.append(curve) # curve 3 curve = QwtCurve() curve.setPen(QPen(Qt.darkCyan)) curve.setStyle(QwtCurve.Steps) self.curves.append(curve) # curve 4 curve = QwtCurve() curve.setStyle(QwtCurve.NoCurve) curve.setSymbol(QwtSymbol(QwtSymbol.XCross, QBrush(), QPen(Qt.darkMagenta), QSize(5, 5))) self.curves.append(curve) # attach data, using Numeric self.x = arrayrange(0, 10.0, 10.0/SIZE) self.y = sin(self.x)*cos(2*self.x) for curve in self.curves: curve.setData(self.x, self.y) self.xMap = QwtDiMap() self.xMap.setDblRange(-0.5, 10.5, 0.0) self.yMap = QwtDiMap() self.yMap.setDblRange(-1.1, 1.1, 0.0) def drawContents(self, painter): # draw curves r = self.contentsRect() dy = r.height()/len(self.curves) r.setHeight(dy) for curve in self.curves: self.xMap.setIntRange(r.left(), r.right()) self.yMap.setIntRange(r.top(), r.bottom()) curve.draw(painter, self.xMap, self.yMap) r.moveBy(0, dy) # draw titles r = self.contentsRect() r.setHeight(dy) painter.setFont(QFont('Helvetica', 8)) painter.setPen(Qt.black) titles = [ 'Style: Spline, Symbol: Cross', 'Style: Sticks, Symbol: Ellipse', 'Style: Lines, Symbol: None', 'Style: Steps, Symbol: None', 'Style: NoCurve, Symbol: XCross' ] for title in titles: painter.drawText( 0, r.top(), r.width(), painter.fontMetrics().height(), Qt.AlignTop | Qt.AlignHCenter, title) r.moveBy(0, dy) def make(): demo = CurveDemo() demo.resize(300, 600) 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)