dev: добавил обработчик ошибок в модули + определил тип вводимых данных в окна настроек
This commit is contained in:
parent
8179a33964
commit
a66495af52
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -51,7 +51,6 @@ class DirectoryMonitor(BaseDirectoryMonitor):
|
||||
|
||||
def update_plots(self):
|
||||
if self._files is not None:
|
||||
print("updPlot")
|
||||
self._mediator.notify(self, self._files)
|
||||
|
||||
def custom_csv_extract_only(self, path: str):
|
||||
@ -62,15 +61,12 @@ class DirectoryMonitor(BaseDirectoryMonitor):
|
||||
self._mediator.notify(self, [None])
|
||||
|
||||
def start_raport(self) -> None:
|
||||
print("startRaport")
|
||||
self.stop()
|
||||
self._files = []
|
||||
print(self._files)
|
||||
self._files = ['']
|
||||
self._mediator.notify(self, [None])
|
||||
|
||||
|
||||
def start_seeking(self) -> None:
|
||||
print("startSeeking")
|
||||
self._init_state()
|
||||
self.start()
|
||||
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
import pandas as pd
|
||||
import traceback
|
||||
import sys
|
||||
from loguru import logger
|
||||
|
||||
from utils.base.base import BasePointPassportFormer, BaseIdealDataBuilder
|
||||
|
||||
@ -32,8 +35,16 @@ class idealDataBuilder(BaseIdealDataBuilder):
|
||||
class PassportFormer(BasePointPassportFormer):
|
||||
|
||||
def form_passports(self, data: list[pd.DataFrame]) -> list[list[pd.DataFrame, dict, int]]:
|
||||
return_data = [self._build_passports_pocket(dataframe) for dataframe in data]
|
||||
self._mediator.notify(self, return_data)
|
||||
try:
|
||||
return_data = [self._build_passports_pocket(dataframe) for dataframe in data]
|
||||
except:
|
||||
tb = sys.exc_info()[2]
|
||||
tbinfo = traceback.format_tb(tb)[0]
|
||||
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
|
||||
logger.error(pymsg)
|
||||
return_data = []
|
||||
finally:
|
||||
self._mediator.notify(self, return_data)
|
||||
|
||||
|
||||
def _build_passports_pocket(self, dataframe: pd.DataFrame) -> list[pd.DataFrame, dict, int]:
|
||||
@ -64,11 +75,9 @@ class PassportFormer(BasePointPassportFormer):
|
||||
cache_key = self._generate_cache_key(params_list)
|
||||
if cache_key in self._ideal_data_cashe :
|
||||
ideal_data = self._ideal_data_cashe[cache_key]
|
||||
print(f"Cache hit")
|
||||
else:
|
||||
ideal_data = self._build_ideal_data(idealDataBuilder=idealDataBuilder, params=params_list)
|
||||
self._ideal_data_cashe[cache_key] = ideal_data
|
||||
print(f"Cache miss. Computed and cached.")
|
||||
if events is not None:
|
||||
idx = i+1 if idx_shift else i
|
||||
point_timeframe = [events[self._stages[0]][0][i], events[self._stages[-1]][1][idx]]
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,5 +1,8 @@
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QGraphicsRectItem
|
||||
import copy
|
||||
import traceback
|
||||
import sys
|
||||
from loguru import logger
|
||||
import pyqtgraph as pg
|
||||
import pandas as pd
|
||||
from typing import Optional, Any
|
||||
@ -308,8 +311,16 @@ class PlotWidget(BasePlotWidget):
|
||||
...
|
||||
]
|
||||
"""
|
||||
widgets_datapack = [self._build_widget(data_sample) for data_sample in data]
|
||||
self._mediator.notify(self, widgets_datapack)
|
||||
try:
|
||||
widgets_datapack = [self._build_widget(data_sample) for data_sample in data]
|
||||
except:
|
||||
tb = sys.exc_info()[2]
|
||||
tbinfo = traceback.format_tb(tb)[0]
|
||||
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
|
||||
logger.error(pymsg)
|
||||
widgets_datapack = [QLabel(pymsg)]
|
||||
finally:
|
||||
self._mediator.notify(self, widgets_datapack)
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,10 @@ import pyqtgraph as pg
|
||||
from pyqtgraph.parametertree import Parameter, ParameterTree
|
||||
from typing import Union
|
||||
from PyQt5 import QtWidgets
|
||||
from cachetools import LRUCache
|
||||
import traceback
|
||||
import sys
|
||||
from loguru import logger
|
||||
|
||||
|
||||
|
||||
class ReportSettings(QtWidgets.QWidget):
|
||||
@ -12,28 +15,34 @@ class ReportSettings(QtWidgets.QWidget):
|
||||
|
||||
def build(self, index, reg_items: dict, curve_items: dict) -> None:
|
||||
"""Создает ParameterTree для элементов всех графиков выбранной вкладки"""
|
||||
self._clear()
|
||||
param_tree = ParameterTree()
|
||||
layout = self.layout()
|
||||
layout.addWidget(param_tree)
|
||||
"""if index in self._tab_cashe:
|
||||
body = self._tab_cashe[index]
|
||||
else:
|
||||
try:
|
||||
self._clear()
|
||||
param_tree = ParameterTree()
|
||||
layout = self.layout()
|
||||
layout.addWidget(param_tree)
|
||||
"""if index in self._tab_cashe:
|
||||
body = self._tab_cashe[index]
|
||||
else:
|
||||
body= [
|
||||
self._generate_reg_params(reg_items),
|
||||
self._generate_curve_params(curve_items)
|
||||
]
|
||||
self._tab_cashe[index] = body"""
|
||||
body= [
|
||||
self._generate_reg_params(reg_items),
|
||||
self._generate_curve_params(curve_items)
|
||||
]
|
||||
self._tab_cashe[index] = body"""
|
||||
body= [
|
||||
self._generate_reg_params(reg_items),
|
||||
self._generate_curve_params(curve_items)
|
||||
]
|
||||
# Добавляем параметры в дерево
|
||||
params = Parameter.create(name='params', type='group', children=body)
|
||||
params.sigTreeStateChanged.connect(
|
||||
lambda: self._update_settings(reg_items, curve_items, params)
|
||||
)
|
||||
param_tree.setParameters(params, showTop=False)
|
||||
self._generate_reg_params(reg_items),
|
||||
self._generate_curve_params(curve_items)
|
||||
]
|
||||
# Добавляем параметры в дерево
|
||||
params = Parameter.create(name='params', type='group', children=body)
|
||||
params.sigTreeStateChanged.connect(
|
||||
lambda: self._update_settings(reg_items, curve_items, params)
|
||||
)
|
||||
param_tree.setParameters(params, showTop=False)
|
||||
except:
|
||||
tb = sys.exc_info()[2]
|
||||
tbinfo = traceback.format_tb(tb)[0]
|
||||
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
|
||||
logger.error(pymsg)
|
||||
|
||||
def _clear(self) -> None:
|
||||
"""
|
||||
|
||||
@ -2,8 +2,9 @@ from typing import Callable, Optional, Any
|
||||
from PyQt5.QtWidgets import (QWidget, QPushButton,
|
||||
QLineEdit, QHBoxLayout,
|
||||
QVBoxLayout, QLabel,
|
||||
QTableWidget, QTableWidgetItem)
|
||||
from PyQt5.QtGui import QIntValidator
|
||||
QTableWidget, QTableWidgetItem,
|
||||
QStyledItemDelegate)
|
||||
from PyQt5.QtGui import QIntValidator, QDoubleValidator
|
||||
|
||||
from utils.json_tools import read_json, write_json
|
||||
from utils import qt_settings as qts
|
||||
@ -88,33 +89,34 @@ class settingsWindow(QWidget):
|
||||
self._param_table.setColumnCount(0)
|
||||
return
|
||||
|
||||
column_count = len(self._data[first_key]) + 1
|
||||
column_count = len(self._data[first_key])
|
||||
self._param_table.setRowCount(len(self._data))
|
||||
self._param_table.setColumnCount(column_count)
|
||||
self._param_table.setVerticalHeaderLabels(self._data.keys())
|
||||
|
||||
for i, (key, items) in enumerate(self._data.items()):
|
||||
self._param_table.setItem(i, 0, QTableWidgetItem(key))
|
||||
int_delegate = ValidatorDelegate(data_type='int', parent=self._param_table)
|
||||
float_delegate = ValidatorDelegate(data_type='float', parent=self._param_table)
|
||||
str_delegate = ValidatorDelegate(data_type='str', parent=self._param_table)
|
||||
|
||||
for i, (_, items) in enumerate(self._data.items()):
|
||||
for j, item in enumerate(items):
|
||||
self._param_table.setItem(i, j+1, QTableWidgetItem(str(item)))
|
||||
self._param_table.setItem(i, j, QTableWidgetItem(str(item)))
|
||||
|
||||
if type(item) == int:
|
||||
self._param_table.setItemDelegateForRow(i, int_delegate)
|
||||
elif type(item) == float:
|
||||
self._param_table.setItemDelegateForRow(i, float_delegate)
|
||||
else:
|
||||
self._param_table.setItemDelegateForRow(i, str_delegate)
|
||||
|
||||
|
||||
def _save(self) -> None:
|
||||
"""Сохраняет текущие параметры из таблицы в self._data и вызывает _upd_func()."""
|
||||
new_data = {}
|
||||
row_count = self._param_table.rowCount()
|
||||
col_count = self._param_table.columnCount()
|
||||
|
||||
for i in range(row_count):
|
||||
key_item = self._param_table.item(i, 0)
|
||||
if key_item is None:
|
||||
continue
|
||||
key = key_item.text()
|
||||
|
||||
# Если ключ пустой, пропускаем
|
||||
if not key:
|
||||
continue
|
||||
|
||||
for i, key in enumerate(self._data.keys()):
|
||||
row_data = []
|
||||
for j in range(1, col_count):
|
||||
for j in range(col_count):
|
||||
cell_item = self._param_table.item(i, j)
|
||||
if cell_item is None:
|
||||
continue
|
||||
@ -154,7 +156,7 @@ class settingsWindow(QWidget):
|
||||
return
|
||||
|
||||
prev_columns = self._param_table.columnCount()
|
||||
desired_columns = num_points + 1
|
||||
desired_columns = num_points
|
||||
|
||||
if desired_columns <= prev_columns:
|
||||
return
|
||||
@ -188,6 +190,26 @@ class OperatorSettings(settingsWindow):
|
||||
pass
|
||||
|
||||
|
||||
class ValidatorDelegate(QStyledItemDelegate):
|
||||
def __init__(self, data_type='str', parent=None):
|
||||
super().__init__(parent)
|
||||
self.data_type = data_type
|
||||
if self.data_type == 'int':
|
||||
self.validator = QIntValidator()
|
||||
elif self.data_type == 'float':
|
||||
self.validator = QDoubleValidator()
|
||||
self.validator.setNotation(QDoubleValidator.StandardNotation)
|
||||
else:
|
||||
self.validator = None
|
||||
|
||||
def createEditor(self, parent, option, index):
|
||||
editor = QLineEdit(parent)
|
||||
if self.validator:
|
||||
editor.setValidator(self.validator)
|
||||
return editor
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import pyqtgraph as pg
|
||||
app = pg.mkQApp("Parameter Tree Example")
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user