sw: update reference graph options

This commit is contained in:
Phil
2026-05-26 16:16:15 +03:00
parent 07ffb31651
commit d925a4ffaa
2 changed files with 74 additions and 5 deletions

View File

@ -10,7 +10,7 @@ from dataclasses import dataclass
from PyQt6.QtCore import QProcess, QTimer from PyQt6.QtCore import QProcess, QTimer
from PyQt6.QtCore import QObject, QThread, pyqtSignal from PyQt6.QtCore import QObject, QThread, pyqtSignal
from PyQt6.QtCore import Qt
import pyqtgraph as pg import pyqtgraph as pg
from PyQt6.QtWidgets import QApplication, QMainWindow from PyQt6.QtWidgets import QApplication, QMainWindow
@ -574,9 +574,23 @@ class MainWindow(QMainWindow):
self.graph_widget.setLabel("bottom", "Sample") self.graph_widget.setLabel("bottom", "Sample")
self.graph_widget.showGrid(x=True, y=True) self.graph_widget.showGrid(x=True, y=True)
self.graph_curve = self.graph_widget.plot([]) self.graph_curve = self.graph_widget.plot(
[],
name="Data",
)
self.reference_curve = self.graph_widget.plot(
[],
name="Reference",
)
self.graph_layout.addWidget(self.graph_widget) self.graph_layout.addWidget(self.graph_widget)
self.graph_curve = self.graph_widget.plot([], pen=pg.mkPen(width=2))
self.reference_curve = self.graph_widget.plot(
[], pen=pg.mkPen(style=Qt.PenStyle.DashLine))
self.checkbox_draw_reference.stateChanged.connect(
self.update_reference_graph)
def setup_network_settings(self): def setup_network_settings(self):
self._bind_spinbox_setting( self._bind_spinbox_setting(
@ -655,8 +669,8 @@ class MainWindow(QMainWindow):
def on_data_received(self, data: list[int]): def on_data_received(self, data: list[int]):
self.data = data self.data = data
x = list(range(len(data))) self.draw_main_graph()
self.graph_curve.setData(x, data) self.update_reference_graph()
if data: if data:
self.set_measurement_status( self.set_measurement_status(
@ -684,6 +698,54 @@ class MainWindow(QMainWindow):
if hasattr(self, "label_ping_status"): if hasattr(self, "label_ping_status"):
self.label_ping_status.setText(text) self.label_ping_status.setText(text)
def draw_main_graph(self):
if not self.data:
self.graph_curve.setData([])
return
x = list(range(len(self.data)))
self.graph_curve.setData(x, self.data)
def update_reference_graph(self):
"""
Рисует или очищает эталонный график.
Вызывается после получения данных и при переключении checkbox_draw_reference.
"""
if not self.checkbox_draw_reference.isChecked():
self.reference_curve.setData([])
return
if not self.data:
self.reference_curve.setData([])
return
reference_data = self.build_reference_data(len(self.data))
if not reference_data:
self.reference_curve.setData([])
return
x = list(range(len(reference_data)))
self.reference_curve.setData(x, reference_data)
def build_reference_data(self, length: int) -> list[int]:
"""
Тут потом опишешь свою логику построения эталонного сигнала.
Главное: вернуть массив такой же или нужной тебе длины.
Например:
reference = [0] * length
reference[10:100] = ...
return reference
"""
# TODO: сюда вставить свою логику эталонного графика
reference = [0] * length
return reference
def main(): def main():
app = QApplication(sys.argv) app = QApplication(sys.argv)

View File

@ -23,7 +23,7 @@
<item> <item>
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@ -409,6 +409,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="checkbox_draw_reference">
<property name="text">
<string>Отрисовка эталона</string>
</property>
</widget>
</item>
<item> <item>
<spacer name="verticalSpacer_2"> <spacer name="verticalSpacer_2">
<property name="orientation"> <property name="orientation">