Python版本:Python 3.7
pyqt5:pip install pyqt5
pyqt5-tools:pip install pyqt5-tools
pyqtchart:pip install pyqtchart
设置需要显示的时长、刷新时间,就可以得到最大显示的数据量。
def setupPrarmeters(self):
# 设置数据显示时间 1min
self.showTime = 60 * 1
# 设置数据刷新时间 1s
self.flushTime = 1000 * 1
# 设置显示数据量
self.totalNum = self.showTime / self.flushTime * 1000
包括设置图表名称、设置坐标轴名称、显示范围、以及显示样式等。
注意:不能直接使用self.chart = QChart()
进行QChart的实例化,要连接到Ui_Form里的grahicsView.chart(),否则无法在主窗口下的Chart子窗口中显示数据。
def chart_init(self):
# self.chart = QChart()
self.chart = self.graphicsView.chart()
self.chart.setTitle('测试样例')
self.series = QSplineSeries()
# 设置曲线名称
self.series.setName("实时数据")
# 把曲线添加到QChart的实例中
self.chart.addSeries(self.series)
# 声明并初始化X轴,Y轴
self.dtaxisX = QDateTimeAxis()
self.vlaxisY = QValueAxis()
# 设置坐标轴显示范围
self.dtaxisX.setMin(QDateTime.currentDateTime().addSecs(-self.showTime*1))
self.dtaxisX.setMax(QDateTime.currentDateTime().addSecs(0))
self.vlaxisY.setMin(-300)
self.vlaxisY.setMax(300)
# 设置X轴时间样式
self.dtaxisX.setFormat("hh:mm:ss")
# 设置坐标轴上的格点
self.dtaxisX.setTickCount(6)
self.vlaxisY.setTickCount(11)
# 设置坐标轴名称
self.dtaxisX.setTitleText("时间")
self.vlaxisY.setTitleText("幅值")
# 设置网格不显示
self.vlaxisY.setGridLineVisible(False)
# 把坐标轴添加到chart中
self.chart.addAxis(self.dtaxisX, Qt.AlignBottom)
self.chart.addAxis(self.vlaxisY, Qt.AlignLeft)
# 把曲线关联到坐标轴
self.series.attachAxis(self.dtaxisX)
self.series.attachAxis(self.vlaxisY)
设置定时器定时数,即界面刷新间隔。每次刷新调用 drawLine 函数。
def timer_init(self):
# 使用QTimer,1秒触发一次,更新数据
self.timer = QTimer(self)
self.timer.timeout.connect(self.drawLine)
self.timer.start(self.flushTime)
drawLine 函数
def drawLine(self):
# 获取当前时间
bjtime = QDateTime.currentDateTime()
# 更新X轴坐标
self.dtaxisX.setMin(QDateTime.currentDateTime().addSecs(-self.showTime*1))
self.dtaxisX.setMax(QDateTime.currentDateTime().addSecs(0))
# 当曲线上的点超出X轴的范围时,移除最早的点
if self.series.count() > self.totalNum:
self.series.removePoints(0, self.series.count()-self.totalNum)
# 产生随机数
yint = random.randint(-250, 250)
# 添加数据到曲线末端
self.series.append(bjtime.toMSecsSinceEpoch(), yint)
导入相关包,初始化页面并调用上面的方法。
from ui_test.testV3_1 import Ui_Form
import sys
import random
from PyQt5.QtChart import QDateTimeAxis, QValueAxis, QSplineSeries, QChart, QChartView
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import QDateTime, Qt, QTimer
class mainWindow(QWidget, Ui_Form):
def __init__(self, parent=None):
super(mainWindow, self).__init__(parent)
self.setupUi(self)
self.setupPrarmeters()
self.chart_init()
self.timer_init()
if __name__ == "__main__":
app = QApplication(sys.argv)
view = mainWindow()
view.show()
sys.exit(app.exec_())
mainWindow 类继承使用QtDesigner插件设计的页面Ui_Form,插件使用方法以及类型提升方法见博客
(QtDesigner安装及配置https://blog.csdn.net/qq_43950000/article/details/120596301)
(类型提升方法https://blog.csdn.net/g11023225/article/details/119274622)