diff --git a/src/gui/__pycache__/mainGui.cpython-310.pyc b/src/gui/__pycache__/mainGui.cpython-310.pyc index b6a102a..74baf8e 100644 Binary files a/src/gui/__pycache__/mainGui.cpython-310.pyc and b/src/gui/__pycache__/mainGui.cpython-310.pyc differ diff --git a/src/gui/__pycache__/plotter.cpython-310.pyc b/src/gui/__pycache__/plotter.cpython-310.pyc index 629f6aa..df953b5 100644 Binary files a/src/gui/__pycache__/plotter.cpython-310.pyc and b/src/gui/__pycache__/plotter.cpython-310.pyc differ diff --git a/src/gui/__pycache__/reportGui.cpython-310.pyc b/src/gui/__pycache__/reportGui.cpython-310.pyc index 5167370..252a6e1 100644 Binary files a/src/gui/__pycache__/reportGui.cpython-310.pyc and b/src/gui/__pycache__/reportGui.cpython-310.pyc differ diff --git a/src/gui/mainGui.py b/src/gui/mainGui.py index 528f53b..9421ec1 100644 --- a/src/gui/mainGui.py +++ b/src/gui/mainGui.py @@ -202,11 +202,12 @@ class MainWindow(BaseMainWindow): def show_plot_tabs(self, plot_widgets: list[QtWidgets.QWidget]) -> None: for plot_widget in plot_widgets: - widget, reg_items, curve_items = plot_widget + widget, reg_items, curve_items, qt_items = plot_widget tab = QtWidgets.QWidget() tab.setProperty("reg_items", reg_items) - tab.setProperty("curve_items", curve_items) + tab.setProperty("curve_items", curve_items) + tab.setProperty("qt_items", qt_items) grid = QtWidgets.QGridLayout() grid.addWidget(widget) tab.setLayout(grid) @@ -259,7 +260,8 @@ class MainWindow(BaseMainWindow): if tab is not None and self.report_dock.isVisible(): reg_items = tab.property("reg_items") curve_items = tab.property("curve_items") - self.repSettings.build(index, reg_items, curve_items) + qt_items = tab.property("qt_items") + self.repSettings.build(index, reg_items, curve_items, qt_items) def _save_plots(self) -> None: filepath, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save file", "", "Image Files (*.png *.jpeg)") diff --git a/src/gui/plotter.py b/src/gui/plotter.py index 9865c16..b709a29 100644 --- a/src/gui/plotter.py +++ b/src/gui/plotter.py @@ -1,4 +1,9 @@ -from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QGraphicsRectItem +from PyQt5.QtWidgets import (QWidget, QVBoxLayout, + QHBoxLayout, QLabel, + QGraphicsRectItem, QSpacerItem, + QSizePolicy) + +from PyQt5.QtCore import Qt import copy import traceback import sys @@ -144,21 +149,36 @@ class PlotWidget(BasePlotWidget): layout: QVBoxLayout, TWC_time: float, ideal_time: float, - tesla_time: float) -> None: + tesla_time: float, + qt_items: dict) -> None: """ Добавляет QLabel с информацией о производительности. """ tesla_TWC = round((1 - TWC_time/tesla_time)*100, 2) if tesla_time else 0.0 tesla_ideal = round((1 - ideal_time/tesla_time)*100, 2) if tesla_time else 0.0 TWC_ideal = round((ideal_time/TWC_time)*100, 2) if TWC_time else 0.0 + + label_widget = QWidget() + label_layout = QHBoxLayout(label_widget) + start_label = QLabel("Сокращение длительности: ") + real_label = QLabel(f"фактическое = {tesla_TWC} % ") + ideal_label = QLabel(f"идеальное = {tesla_ideal} % ") + kdip_label = QLabel(f"КДИП = {TWC_ideal}% ") + label_layout.addWidget(start_label, alignment=Qt.AlignLeft) + label_layout.addWidget(real_label, alignment=Qt.AlignLeft) + label_layout.addWidget(ideal_label, alignment=Qt.AlignLeft) + label_layout.addWidget(kdip_label, alignment=Qt.AlignLeft) + spacer = QSpacerItem(1, 1, QSizePolicy.Expanding, QSizePolicy.Minimum) + label_layout.addSpacerItem(spacer) + + self.set_style(label_widget) + layout.addWidget(label_widget) + + qt_items["performance label"] = label_widget + qt_items["real performance"] = real_label + qt_items["ideal performance"] = ideal_label + qt_items["real to ideal performance"] = kdip_label - performance_label = QLabel( - f"Сокращение длительности: фактическое = {tesla_TWC} %" - ) - #f"идеальное = {tesla_ideal} %; КДИП = {TWC_ideal}%" - self.set_style(performance_label) - layout.addWidget(performance_label) - performance_label.update() def _build_widget(self, data: list[Any]) -> QWidget: """ @@ -170,6 +190,7 @@ class PlotWidget(BasePlotWidget): plot_layout = pg.GraphicsLayoutWidget() reg_items = {"real":{}, "ideal":{}} curve_items = {"real":{}, "ideal":{}} + qt_items = {} dataframe, points_pocket, useful_data = data tesla_time = useful_data["tesla_time"] @@ -288,7 +309,7 @@ class PlotWidget(BasePlotWidget): plot_item.setXLink(main_plot) if settings["performance"] and not dat_is_none: - self._add_performance_label(result_layout, TWC_time, ideal_time, tesla_time) + self._add_performance_label(result_layout, TWC_time, ideal_time, tesla_time, qt_items) plot_layout.addItem(plot_item, widget_num, 0) @@ -299,7 +320,7 @@ class PlotWidget(BasePlotWidget): main_plot.sigXRangeChanged.connect(lambda _, plot=main_plot, region=ROI_region: self._sync_navigator_with_main(main_plot=plot, region=region)) result_layout.addWidget(plot_layout) - return result_widget, reg_items, curve_items + return result_widget, reg_items, curve_items, qt_items def build(self, data: list[list[Any]]) -> None: """ diff --git a/src/gui/reportGui.py b/src/gui/reportGui.py index ab8e62b..b0c6e60 100644 --- a/src/gui/reportGui.py +++ b/src/gui/reportGui.py @@ -13,7 +13,7 @@ class ReportSettings(QtWidgets.QWidget): super().__init__(parent) #self._tab_cashe = LRUCache(maxsize=1000) - def build(self, index, reg_items: dict, curve_items: dict) -> None: + def build(self, index, reg_items: dict, curve_items: dict, qt_items: dict) -> None: """Создает ParameterTree для элементов всех графиков выбранной вкладки""" try: self._clear() @@ -30,12 +30,13 @@ class ReportSettings(QtWidgets.QWidget): self._tab_cashe[index] = body""" body= [ self._generate_reg_params(reg_items), - self._generate_curve_params(curve_items) + self._generate_curve_params(curve_items), + self._generate_qt_params(qt_items) ] # Добавляем параметры в дерево params = Parameter.create(name='params', type='group', children=body) params.sigTreeStateChanged.connect( - lambda: self._update_settings(reg_items, curve_items, params) + lambda: self._update_settings(reg_items, curve_items, qt_items, params) ) param_tree.setParameters(params, showTop=False) except: @@ -58,6 +59,19 @@ class ReportSettings(QtWidgets.QWidget): else: self.setLayout(QtWidgets.QVBoxLayout()) + def _generate_qt_params(self, qt_items: dict) -> dict: + """Создает qt элементы""" + res = {'name': 'Qt elements', 'type': 'group', 'children':[ + {'name': key, 'type': 'group', 'children': self._create_qt_samples(item)} for key, item in qt_items.items() + ]} + return res + + def _create_qt_samples(self, item: Union[QtWidgets.QWidget, QtWidgets.QLabel]) -> dict: + visibility = item.isVisible() + return [ + {'name': 'Visibility', 'type': 'bool', 'value': visibility} + ] + def _generate_reg_params(self, reg_items: dict) -> dict: @@ -128,7 +142,8 @@ class ReportSettings(QtWidgets.QWidget): def _update_settings(self, reg_items: dict, - curve_items: dict, + curve_items: dict, + qt_items: dict, params: Parameter) -> None: """Задает параметры элементов в соответствии с paramTree""" @@ -138,6 +153,8 @@ class ReportSettings(QtWidgets.QWidget): real_plots = params.child("Plots").child("Real plots") ideal_plots = params.child("Plots").child("Ideal plots") + + qt_settings = params.child("Qt elements") self._set_sector_settings(reg_items["real"], real_sectors) self._set_sector_settings(reg_items["ideal"], ideal_sectors) @@ -146,6 +163,8 @@ class ReportSettings(QtWidgets.QWidget): for key, item_dict in curve_items["ideal"].items(): self._set_plot_settings(item_dict, ideal_plots.child(key)) + self._set_qt_settings(qt_items, qt_settings) + def _set_sector_settings(self, sectors: dict, settings: Parameter) -> None: @@ -168,7 +187,7 @@ class ReportSettings(QtWidgets.QWidget): reg.setBrush(brush) def _set_plot_settings(self, - curves:dict, + curves: dict, settings: Parameter) -> None: """Задает параметры кривых в соответствии с настройками""" @@ -185,4 +204,15 @@ class ReportSettings(QtWidgets.QWidget): curve.setPen(pen) else: item.setVisible(visibility) - item.setPen(pen) \ No newline at end of file + item.setPen(pen) + + def _set_qt_settings(self, + qt_items: dict, + settings: Parameter) -> None: + + """Задает параметры Qt элементов в соответствии с настройками""" + + for key, item in qt_items.items(): + sample = settings.child(key) + visibility = sample.child("Visibility").value() + item.setVisible(visibility) \ No newline at end of file