2019-05-05 16:43:00 +08:00
|
|
|
|
#!/usr/bin/env python
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Created on 2019年5月5日
|
|
|
|
|
@author: Yimelia
|
|
|
|
|
@site: https://github.com/yimelia
|
|
|
|
|
@file: DynamicSpline
|
|
|
|
|
@description: This example shows how to draw dynamic data. https://doc.qt.io/qt-5/qtcharts-dynamicspline-example.html
|
|
|
|
|
"""
|
|
|
|
|
import sys
|
|
|
|
|
|
2021-07-13 14:52:26 +08:00
|
|
|
|
try:
|
|
|
|
|
from PyQt5.QtChart import QChartView, QChart, QSplineSeries, QValueAxis
|
|
|
|
|
from PyQt5.QtCore import Qt, QTimer, QRandomGenerator
|
|
|
|
|
from PyQt5.QtGui import QPainter, QPen
|
|
|
|
|
from PyQt5.QtWidgets import QApplication
|
|
|
|
|
except ImportError:
|
|
|
|
|
from PySide2.QtCore import Qt, QTimer, QRandomGenerator
|
|
|
|
|
from PySide2.QtGui import QPainter, QPen
|
|
|
|
|
from PySide2.QtWidgets import QApplication
|
|
|
|
|
from PySide2.QtCharts import QtCharts
|
2019-05-05 16:43:00 +08:00
|
|
|
|
|
2021-07-13 14:52:26 +08:00
|
|
|
|
QChartView = QtCharts.QChartView
|
|
|
|
|
QChart = QtCharts.QChart
|
|
|
|
|
QSplineSeries = QtCharts.QSplineSeries
|
|
|
|
|
QValueAxis = QtCharts.QValueAxis
|
2019-05-05 16:43:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DynamicSpline(QChart):
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super().__init__()
|
|
|
|
|
self.m_step = 0
|
|
|
|
|
self.m_x = 5
|
|
|
|
|
self.m_y = 1
|
|
|
|
|
# 初始化图像
|
|
|
|
|
self.series = QSplineSeries(self)
|
|
|
|
|
green_pen = QPen(Qt.red)
|
|
|
|
|
green_pen.setWidth(3)
|
|
|
|
|
self.series.setPen(green_pen)
|
|
|
|
|
self.axisX = QValueAxis()
|
|
|
|
|
self.axisY = QValueAxis()
|
|
|
|
|
self.series.append(self.m_x, self.m_y)
|
|
|
|
|
|
|
|
|
|
self.addSeries(self.series)
|
|
|
|
|
self.addAxis(self.axisX, Qt.AlignBottom)
|
|
|
|
|
self.addAxis(self.axisY, Qt.AlignLeft)
|
|
|
|
|
self.series.attachAxis(self.axisX)
|
|
|
|
|
self.series.attachAxis(self.axisY)
|
|
|
|
|
self.axisX.setTickCount(5)
|
|
|
|
|
self.axisX.setRange(0, 10)
|
|
|
|
|
self.axisY.setRange(-5, 10)
|
|
|
|
|
|
|
|
|
|
self.timer = QTimer(self)
|
|
|
|
|
self.timer.setInterval(1000)
|
|
|
|
|
self.timer.timeout.connect(self.handleTimeout)
|
|
|
|
|
self.timer.start()
|
|
|
|
|
|
|
|
|
|
def handleTimeout(self):
|
|
|
|
|
x = self.plotArea().width() / self.axisX.tickCount()
|
|
|
|
|
y = (self.axisX.max() - self.axisX.min()) / self.axisX.tickCount()
|
|
|
|
|
self.m_x += y
|
|
|
|
|
# 在PyQt5.11.3及以上版本中,QRandomGenerator.global()被重命名为global_()
|
|
|
|
|
self.m_y = QRandomGenerator.global_().bounded(5) - 2.5
|
|
|
|
|
self.series.append(self.m_x, self.m_y)
|
|
|
|
|
self.scroll(x, 0)
|
|
|
|
|
if self.m_x >= 100:
|
|
|
|
|
self.timer.stop()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
app = QApplication(sys.argv)
|
|
|
|
|
chart = DynamicSpline()
|
|
|
|
|
chart.setTitle("Dynamic spline chart")
|
|
|
|
|
chart.legend().hide()
|
|
|
|
|
chart.setAnimationOptions(QChart.AllAnimations)
|
|
|
|
|
|
|
|
|
|
view = QChartView(chart)
|
|
|
|
|
view.setRenderHint(QPainter.Antialiasing) # 抗锯齿
|
|
|
|
|
view.resize(400, 300)
|
|
|
|
|
view.show()
|
|
|
|
|
sys.exit(app.exec_())
|