144 lines
5.8 KiB
Python
144 lines
5.8 KiB
Python
from PyQt5.QtWidgets import *
|
|
from PyQt5.QtCore import *
|
|
from PyQt5.QtGui import *
|
|
from PyQt5.QtChart import QChart, QChartView, QLineSeries, QDateTimeAxis, QValueAxis
|
|
|
|
|
|
class DrawWindow(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
self.setGeometry(200, 200, 600, 400)
|
|
self.setWindowIcon(QIcon("gml.png"))
|
|
|
|
self.humi_series = QLineSeries()
|
|
self.temp_series = QLineSeries()
|
|
self.light_series = QLineSeries()
|
|
|
|
ctime = QDateTime.currentDateTime()
|
|
|
|
humi_chart = QChart()
|
|
humi_chart.setTheme(QChart.ChartThemeLight)
|
|
humi_chart.addSeries(self.humi_series)
|
|
humi_chart.setTitle("时间-湿度变化曲线")
|
|
|
|
temp_chart = QChart()
|
|
temp_chart.setTheme(QChart.ChartThemeLight)
|
|
temp_chart.addSeries(self.temp_series)
|
|
temp_chart.setTitle("时间-温度变化曲线")
|
|
|
|
light_chart = QChart()
|
|
light_chart.setTheme(QChart.ChartThemeLight)
|
|
light_chart.addSeries(self.light_series)
|
|
light_chart.setTitle("时间-光照度变化曲线")
|
|
|
|
self.humi_dtaxisX = QDateTimeAxis()
|
|
self.temp_dtaxisX = QDateTimeAxis()
|
|
self.light_dtaxisX = QDateTimeAxis()
|
|
self.humi_vlaxisY = QValueAxis()
|
|
self.temp_vlaxisY = QValueAxis()
|
|
self.light_vlaxisY = QValueAxis()
|
|
self.humi_dtaxisX.setMin(ctime.addSecs(0))
|
|
self.humi_dtaxisX.setMax(ctime.addSecs(-60))
|
|
self.temp_dtaxisX.setMin(ctime.addSecs(0))
|
|
self.temp_dtaxisX.setMax(ctime.addSecs(-60))
|
|
self.light_dtaxisX.setMin(ctime.addSecs(0))
|
|
self.light_dtaxisX.setMax(ctime.addSecs(-60))
|
|
self.humi_vlaxisY.setMin(40)
|
|
self.humi_vlaxisY.setMax(50)
|
|
self.temp_vlaxisY.setMin(20)
|
|
self.temp_vlaxisY.setMax(30)
|
|
self.light_vlaxisY.setMin(0)
|
|
self.light_vlaxisY.setMax(100)
|
|
|
|
self.humi_dtaxisX.setFormat("hh:mm:ss")
|
|
self.humi_dtaxisX.setTickCount(10)
|
|
self.temp_dtaxisX.setFormat("hh:mm:ss")
|
|
self.temp_dtaxisX.setTickCount(10)
|
|
self.light_dtaxisX.setFormat("hh:mm:ss")
|
|
self.light_dtaxisX.setTickCount(10)
|
|
self.humi_vlaxisY.setTickCount(10)
|
|
self.temp_vlaxisY.setTickCount(10)
|
|
self.light_vlaxisY.setTickCount(1)
|
|
|
|
self.humi_dtaxisX.setTitleText("时间")
|
|
self.temp_dtaxisX.setTitleText("时间")
|
|
self.light_dtaxisX.setTitleText("时间")
|
|
self.humi_vlaxisY.setTitleText("湿度")
|
|
self.temp_vlaxisY.setTitleText("温度")
|
|
self.light_vlaxisY.setTitleText("光照度")
|
|
|
|
self.humi_vlaxisY.setGridLineVisible(True)
|
|
self.humi_vlaxisY.setGridLineColor(Qt.gray)
|
|
self.temp_vlaxisY.setGridLineVisible(True)
|
|
self.temp_vlaxisY.setGridLineColor(Qt.gray)
|
|
self.light_vlaxisY.setGridLineVisible(True)
|
|
self.light_vlaxisY.setGridLineColor(Qt.gray)
|
|
self.humi_dtaxisX.setGridLineVisible(True)
|
|
self.humi_dtaxisX.setGridLineColor(Qt.gray)
|
|
self.temp_dtaxisX.setGridLineVisible(True)
|
|
self.temp_dtaxisX.setGridLineColor(Qt.gray)
|
|
self.light_dtaxisX.setGridLineVisible(True)
|
|
self.light_dtaxisX.setGridLineColor(Qt.gray)
|
|
|
|
humi_chart.addAxis(self.humi_dtaxisX, Qt.AlignBottom)
|
|
humi_chart.addAxis(self.humi_vlaxisY, Qt.AlignLeft)
|
|
temp_chart.addAxis(self.temp_dtaxisX, Qt.AlignBottom)
|
|
temp_chart.addAxis(self.temp_vlaxisY, Qt.AlignLeft)
|
|
light_chart.addAxis(self.light_dtaxisX, Qt.AlignBottom)
|
|
light_chart.addAxis(self.light_vlaxisY, Qt.AlignLeft)
|
|
|
|
self.humi_series.attachAxis(self.humi_dtaxisX)
|
|
self.humi_series.attachAxis(self.humi_vlaxisY)
|
|
self.temp_series.attachAxis(self.temp_dtaxisX)
|
|
self.temp_series.attachAxis(self.temp_vlaxisY)
|
|
self.light_series.attachAxis(self.light_dtaxisX)
|
|
self.light_series.attachAxis(self.light_vlaxisY)
|
|
|
|
humi_chartview = QChartView(humi_chart)
|
|
temp_chartview = QChartView(temp_chart)
|
|
light_chartview = QChartView(light_chart)
|
|
|
|
layout = QGridLayout()
|
|
layout.addWidget(humi_chartview, 1, 1)
|
|
layout.addWidget(temp_chartview, 1, 2)
|
|
layout.addWidget(light_chartview, 2, 1)
|
|
self.setLayout(layout)
|
|
|
|
self.node_seq = 2
|
|
|
|
def start(self, node_seq: int):
|
|
self.setWindowTitle(f"节点{node_seq}数据监测图")
|
|
self.node_seq = node_seq
|
|
self.show()
|
|
|
|
def addPoint(self, node_seq: int, node_data: dict):
|
|
|
|
if self.node_seq == node_seq:
|
|
ctime = QDateTime.currentDateTime()
|
|
self.humi_dtaxisX.setMin(ctime.addSecs(-60))
|
|
self.humi_dtaxisX.setMax(ctime.addSecs(0))
|
|
self.temp_dtaxisX.setMin(ctime.addSecs(-60))
|
|
self.temp_dtaxisX.setMax(ctime.addSecs(0))
|
|
self.light_dtaxisX.setMin(ctime.addSecs(-60))
|
|
self.light_dtaxisX.setMax(ctime.addSecs(0))
|
|
|
|
if self.humi_vlaxisY.max() - 2 < node_data['humi'] or self.humi_vlaxisY.min() + 2 > node_data['humi']:
|
|
self.humi_vlaxisY.setMin(node_data['humi'] * 0.8)
|
|
self.humi_vlaxisY.setMax(node_data['humi'] * 1.2)
|
|
|
|
if self.temp_vlaxisY.max() - 2 < node_data['temp'] or self.temp_vlaxisY.min() + 2 > node_data['temp']:
|
|
self.temp_vlaxisY.setMin(node_data['temp'] * 0.8)
|
|
self.temp_vlaxisY.setMax(node_data['temp'] * 1.2)
|
|
|
|
if self.light_vlaxisY.max() - 20 < node_data['light'] or self.light_vlaxisY.min() + 20 > node_data['light']:
|
|
self.light_vlaxisY.setMin(node_data['light'] * 0.8)
|
|
self.light_vlaxisY.setMax(node_data['light'] * 1.2)
|
|
|
|
self.humi_series.append(
|
|
ctime.toMSecsSinceEpoch(), node_data['humi'])
|
|
self.temp_series.append(
|
|
ctime.toMSecsSinceEpoch(), node_data['temp'])
|
|
self.light_series.append(
|
|
ctime.toMSecsSinceEpoch(), node_data['light'])
|