1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
# -*- coding: utf-8 -*-
#
# Licensed under the terms of the PyQwt License
# Copyright (C) 2003-2009 Gerard Vermeulen, for the original PyQwt example
# Copyright (c) 2015 Pierre Raybaut, for the PyQt5/PySide port and further
# developments (e.g. ported to PythonQwt API)
# (see LICENSE file for more details)
SHOW = True # Show test in GUI-based test launcher
import numpy as np
from qtpy.QtCore import QSize, Qt
from qtpy.QtGui import QBrush, QColor, QPainter, QPalette, QPen
from qtpy.QtWidgets import QFrame
from qwt import QwtPlotCurve, QwtScaleMap, QwtSymbol
from qwt.tests import utils
Size = 15
USize = 13
class CurveDemo2(QFrame):
def __init__(self, *args):
QFrame.__init__(self, *args)
self.setFrameStyle(QFrame.Box | QFrame.Raised)
self.setLineWidth(2)
self.setMidLineWidth(3)
p = QPalette()
p.setColor(self.backgroundRole(), QColor(30, 30, 50))
self.setPalette(p)
# make curves and maps
self.tuples = []
# curve 1
curve = QwtPlotCurve()
curve.setPen(QPen(QColor(150, 150, 200), 2))
curve.setStyle(QwtPlotCurve.Lines)
curve.setSymbol(
QwtSymbol(QwtSymbol.XCross, QBrush(), QPen(Qt.yellow, 2), QSize(7, 7))
)
self.tuples.append(
(curve, QwtScaleMap(0, 100, -1.5, 1.5), QwtScaleMap(0, 100, 0.0, 2 * np.pi))
)
# curve 2
curve = QwtPlotCurve()
curve.setPen(QPen(QColor(200, 150, 50), 1, Qt.DashDotDotLine))
curve.setStyle(QwtPlotCurve.Sticks)
curve.setSymbol(
QwtSymbol(QwtSymbol.Ellipse, QBrush(Qt.blue), QPen(Qt.yellow), QSize(5, 5))
)
self.tuples.append(
(curve, QwtScaleMap(0, 100, 0.0, 2 * np.pi), QwtScaleMap(0, 100, -3.0, 1.1))
)
# curve 3
curve = QwtPlotCurve()
curve.setPen(QPen(QColor(100, 200, 150)))
curve.setStyle(QwtPlotCurve.Lines)
self.tuples.append(
(curve, QwtScaleMap(0, 100, -1.1, 3.0), QwtScaleMap(0, 100, -1.1, 3.0))
)
# curve 4
curve = QwtPlotCurve()
curve.setPen(QPen(Qt.red))
curve.setStyle(QwtPlotCurve.Lines)
self.tuples.append(
(curve, QwtScaleMap(0, 100, -5.0, 1.1), QwtScaleMap(0, 100, -1.1, 5.0))
)
# data
self.phase = 0.0
self.base = np.arange(0.0, 2.01 * np.pi, 2 * np.pi / (USize - 1))
self.uval = np.cos(self.base)
self.vval = np.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 paintEvent(self, event):
QFrame.paintEvent(self, event)
painter = QPainter(self)
painter.setClipRect(self.contentsRect())
self.drawContents(painter)
def drawContents(self, painter):
r = self.contentsRect()
for curve, xMap, yMap in self.tuples:
xMap.setPaintInterval(r.left(), r.right())
yMap.setPaintInterval(r.top(), r.bottom())
curve.draw(painter, xMap, yMap, r)
def timerEvent(self, event):
self.newValues()
self.repaint()
def newValues(self):
phase = self.phase
self.xval = np.arange(0, 2.01 * np.pi, 2 * np.pi / (Size - 1))
self.yval = np.sin(self.xval - phase)
self.zval = np.cos(3 * (self.xval + phase))
s = 0.25 * np.sin(phase)
c = np.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 * np.pi / 100
if self.phase > 2 * np.pi:
self.phase = 0.0
def test_curvedemo2():
"""Curve demo 2"""
utils.test_widget(CurveDemo2, options=False)
if __name__ == "__main__":
test_curvedemo2()
|