dev: добавил возможность выбирать выводимую производительность и совмещать их

This commit is contained in:
Andrew 2024-12-24 18:45:07 +03:00
parent bd3ca92171
commit 74b65eee5d
6 changed files with 73 additions and 20 deletions

View File

@ -202,11 +202,12 @@ class MainWindow(BaseMainWindow):
def show_plot_tabs(self, plot_widgets: list[QtWidgets.QWidget]) -> None: def show_plot_tabs(self, plot_widgets: list[QtWidgets.QWidget]) -> None:
for plot_widget in plot_widgets: 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 = QtWidgets.QWidget()
tab.setProperty("reg_items", reg_items) 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 = QtWidgets.QGridLayout()
grid.addWidget(widget) grid.addWidget(widget)
tab.setLayout(grid) tab.setLayout(grid)
@ -259,7 +260,8 @@ class MainWindow(BaseMainWindow):
if tab is not None and self.report_dock.isVisible(): if tab is not None and self.report_dock.isVisible():
reg_items = tab.property("reg_items") reg_items = tab.property("reg_items")
curve_items = tab.property("curve_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: def _save_plots(self) -> None:
filepath, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save file", "", "Image Files (*.png *.jpeg)") filepath, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save file", "", "Image Files (*.png *.jpeg)")

View File

@ -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 copy
import traceback import traceback
import sys import sys
@ -144,21 +149,36 @@ class PlotWidget(BasePlotWidget):
layout: QVBoxLayout, layout: QVBoxLayout,
TWC_time: float, TWC_time: float,
ideal_time: float, ideal_time: float,
tesla_time: float) -> None: tesla_time: float,
qt_items: dict) -> None:
""" """
Добавляет QLabel с информацией о производительности. Добавляет QLabel с информацией о производительности.
""" """
tesla_TWC = round((1 - TWC_time/tesla_time)*100, 2) if tesla_time else 0.0 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 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 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: def _build_widget(self, data: list[Any]) -> QWidget:
""" """
@ -170,6 +190,7 @@ class PlotWidget(BasePlotWidget):
plot_layout = pg.GraphicsLayoutWidget() plot_layout = pg.GraphicsLayoutWidget()
reg_items = {"real":{}, "ideal":{}} reg_items = {"real":{}, "ideal":{}}
curve_items = {"real":{}, "ideal":{}} curve_items = {"real":{}, "ideal":{}}
qt_items = {}
dataframe, points_pocket, useful_data = data dataframe, points_pocket, useful_data = data
tesla_time = useful_data["tesla_time"] tesla_time = useful_data["tesla_time"]
@ -288,7 +309,7 @@ class PlotWidget(BasePlotWidget):
plot_item.setXLink(main_plot) plot_item.setXLink(main_plot)
if settings["performance"] and not dat_is_none: 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) 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)) 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) 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: def build(self, data: list[list[Any]]) -> None:
""" """

View File

@ -13,7 +13,7 @@ class ReportSettings(QtWidgets.QWidget):
super().__init__(parent) super().__init__(parent)
#self._tab_cashe = LRUCache(maxsize=1000) #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 для элементов всех графиков выбранной вкладки""" """Создает ParameterTree для элементов всех графиков выбранной вкладки"""
try: try:
self._clear() self._clear()
@ -30,12 +30,13 @@ class ReportSettings(QtWidgets.QWidget):
self._tab_cashe[index] = body""" self._tab_cashe[index] = body"""
body= [ body= [
self._generate_reg_params(reg_items), 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 = Parameter.create(name='params', type='group', children=body)
params.sigTreeStateChanged.connect( 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) param_tree.setParameters(params, showTop=False)
except: except:
@ -58,6 +59,19 @@ class ReportSettings(QtWidgets.QWidget):
else: else:
self.setLayout(QtWidgets.QVBoxLayout()) 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, def _generate_reg_params(self,
reg_items: dict) -> dict: reg_items: dict) -> dict:
@ -128,7 +142,8 @@ class ReportSettings(QtWidgets.QWidget):
def _update_settings(self, def _update_settings(self,
reg_items: dict, reg_items: dict,
curve_items: dict, curve_items: dict,
qt_items: dict,
params: Parameter) -> None: params: Parameter) -> None:
"""Задает параметры элементов в соответствии с paramTree""" """Задает параметры элементов в соответствии с paramTree"""
@ -138,6 +153,8 @@ class ReportSettings(QtWidgets.QWidget):
real_plots = params.child("Plots").child("Real plots") real_plots = params.child("Plots").child("Real plots")
ideal_plots = params.child("Plots").child("Ideal 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["real"], real_sectors)
self._set_sector_settings(reg_items["ideal"], ideal_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(): for key, item_dict in curve_items["ideal"].items():
self._set_plot_settings(item_dict, ideal_plots.child(key)) self._set_plot_settings(item_dict, ideal_plots.child(key))
self._set_qt_settings(qt_items, qt_settings)
def _set_sector_settings(self, def _set_sector_settings(self,
sectors: dict, sectors: dict,
settings: Parameter) -> None: settings: Parameter) -> None:
@ -168,7 +187,7 @@ class ReportSettings(QtWidgets.QWidget):
reg.setBrush(brush) reg.setBrush(brush)
def _set_plot_settings(self, def _set_plot_settings(self,
curves:dict, curves: dict,
settings: Parameter) -> None: settings: Parameter) -> None:
"""Задает параметры кривых в соответствии с настройками""" """Задает параметры кривых в соответствии с настройками"""
@ -185,4 +204,15 @@ class ReportSettings(QtWidgets.QWidget):
curve.setPen(pen) curve.setPen(pen)
else: else:
item.setVisible(visibility) item.setVisible(visibility)
item.setPen(pen) 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)