diff --git a/software/gui.py b/software/gui.py index 784794e..4bbc24a 100644 --- a/software/gui.py +++ b/software/gui.py @@ -10,7 +10,7 @@ from dataclasses import dataclass from PyQt6.QtCore import QProcess, QTimer from PyQt6.QtCore import QObject, QThread, pyqtSignal - +from PyQt6.QtCore import Qt import pyqtgraph as pg from PyQt6.QtWidgets import QApplication, QMainWindow @@ -574,9 +574,23 @@ class MainWindow(QMainWindow): self.graph_widget.setLabel("bottom", "Sample") 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_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): self._bind_spinbox_setting( @@ -655,8 +669,8 @@ class MainWindow(QMainWindow): def on_data_received(self, data: list[int]): self.data = data - x = list(range(len(data))) - self.graph_curve.setData(x, data) + self.draw_main_graph() + self.update_reference_graph() if data: self.set_measurement_status( @@ -684,6 +698,54 @@ class MainWindow(QMainWindow): if hasattr(self, "label_ping_status"): 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(): app = QApplication(sys.argv) diff --git a/software/reflectometer.ui b/software/reflectometer.ui index 59e8de5..654da3c 100644 --- a/software/reflectometer.ui +++ b/software/reflectometer.ui @@ -23,7 +23,7 @@ - 0 + 1 @@ -409,6 +409,13 @@ + + + + Отрисовка эталона + + +