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:
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)")

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 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:
"""

View File

@ -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)
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)