2024-11-11 12:11:37 +03:00
|
|
|
import pyqtgraph as pg
|
2024-12-04 20:01:30 +03:00
|
|
|
from PyQt5.QtWidgets import QWidget, QTableWidget, QVBoxLayout, QTableWidgetItem, QLabel, QPushButton, QLineEdit, QHBoxLayout
|
|
|
|
|
from PyQt5.QtCore import Qt
|
|
|
|
|
from PyQt5.QtGui import QIntValidator
|
|
|
|
|
|
2024-11-11 12:11:37 +03:00
|
|
|
|
2024-12-05 13:18:53 +03:00
|
|
|
from utils.json_tools import read_json, write_json
|
|
|
|
|
from gui import qt_settings as qts
|
2024-11-11 12:11:37 +03:00
|
|
|
|
2024-12-04 20:01:30 +03:00
|
|
|
class settingsWindow(QWidget):
|
2024-11-11 13:05:18 +03:00
|
|
|
def __init__(self, path: str, name: str, upd_func):
|
2024-11-11 12:11:37 +03:00
|
|
|
super(settingsWindow, self).__init__()
|
2024-12-04 20:01:30 +03:00
|
|
|
self._settingsPath = path
|
|
|
|
|
self._name = name
|
|
|
|
|
self._data = {}
|
|
|
|
|
self._upd_func = upd_func
|
|
|
|
|
|
2024-11-11 12:11:37 +03:00
|
|
|
self.load_settings()
|
2024-11-11 13:05:18 +03:00
|
|
|
self._init_ui()
|
2024-11-11 12:11:37 +03:00
|
|
|
|
2024-11-25 17:20:00 +03:00
|
|
|
def load_settings(self) -> None:
|
2024-12-04 20:01:30 +03:00
|
|
|
self._data = read_json(self._settingsPath)
|
2024-11-11 12:11:37 +03:00
|
|
|
|
2024-11-25 17:20:00 +03:00
|
|
|
def write_settings(self) -> None:
|
2024-12-04 20:01:30 +03:00
|
|
|
write_json(self._settingsPath, self._data)
|
|
|
|
|
|
|
|
|
|
def getParams(self) -> dict:
|
|
|
|
|
return self._data
|
|
|
|
|
|
2024-11-11 12:11:37 +03:00
|
|
|
|
2024-11-25 17:20:00 +03:00
|
|
|
def _init_ui(self) -> None:
|
2024-12-04 20:01:30 +03:00
|
|
|
save_button = QPushButton()
|
|
|
|
|
restore_button = QPushButton()
|
|
|
|
|
save_button.setText("Save")
|
|
|
|
|
restore_button.setText("Restore")
|
|
|
|
|
self._num_points = QLineEdit()
|
|
|
|
|
self._num_points.setPlaceholderText("Enter the number of welding points")
|
|
|
|
|
self._num_points.setValidator(QIntValidator())
|
|
|
|
|
control_layout = QHBoxLayout()
|
|
|
|
|
control_layout.addWidget(save_button)
|
|
|
|
|
control_layout.addWidget(restore_button)
|
|
|
|
|
control_layout.addWidget(self._num_points)
|
|
|
|
|
|
|
|
|
|
save_button.pressed.connect(self._save)
|
|
|
|
|
restore_button.pressed.connect(self._restore)
|
|
|
|
|
self._num_points.editingFinished.connect(self._expand)
|
|
|
|
|
|
|
|
|
|
self._param_table = QTableWidget()
|
|
|
|
|
self._param_table.setColumnCount(2)
|
|
|
|
|
self._param_table.setRowCount(len(self._data))
|
|
|
|
|
for i, (key, items) in enumerate(self._data.items()):
|
|
|
|
|
self._param_table.setItem(i, 0, QTableWidgetItem(key))
|
|
|
|
|
self._param_table.setItem(i, 1, QTableWidgetItem(str(items[0])))
|
|
|
|
|
|
|
|
|
|
layout = QVBoxLayout()
|
|
|
|
|
header = QLabel(self._name)
|
|
|
|
|
layout.addWidget(header)
|
|
|
|
|
layout.addLayout(control_layout)
|
|
|
|
|
layout.addWidget(self._param_table)
|
2024-11-11 12:11:37 +03:00
|
|
|
self.setLayout(layout)
|
2024-11-11 14:28:21 +03:00
|
|
|
self.setStyleSheet(qts.white_style)
|
2024-12-04 20:01:30 +03:00
|
|
|
#self.show()
|
2024-11-11 12:11:37 +03:00
|
|
|
|
2024-12-04 20:01:30 +03:00
|
|
|
def _save(self) -> dict:
|
|
|
|
|
self._data = {}
|
|
|
|
|
for i in range(self._param_table.rowCount()):
|
|
|
|
|
key = self._param_table.item(i, 0).text()
|
|
|
|
|
data = []
|
|
|
|
|
for j in range(1, self._param_table.columnCount()):
|
|
|
|
|
param = self._param_table.item(i, j).text()
|
|
|
|
|
if key != "trace_storage_path":
|
|
|
|
|
param = float(param)
|
|
|
|
|
data.append(param)
|
|
|
|
|
self._data[key] = data
|
|
|
|
|
self.write_settings()
|
|
|
|
|
self._upd_func()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _restore(self) -> None:
|
|
|
|
|
self._param_table.setRowCount(len(self._data))
|
2024-12-05 13:18:53 +03:00
|
|
|
keys = self._data.keys()
|
|
|
|
|
self._param_table.setColumnCount(len(self._data[keys[0]])+1)
|
2024-12-04 20:01:30 +03:00
|
|
|
for i, (key, items) in enumerate(self._data.items()):
|
2024-12-05 11:19:55 +03:00
|
|
|
self._param_table.setColumnCount(len(self._data[key])+1)
|
2024-12-04 20:01:30 +03:00
|
|
|
self._param_table.setItem(i, 0, QTableWidgetItem(key))
|
|
|
|
|
for j, item in enumerate(items):
|
|
|
|
|
self._param_table.setItem(i, j+1, QTableWidgetItem(str(item)))
|
|
|
|
|
|
|
|
|
|
def _expand(self) -> None:
|
|
|
|
|
param=int(self._num_points.text())
|
|
|
|
|
prev_columns = self._param_table.columnCount()
|
|
|
|
|
self._param_table.setColumnCount(param+1)
|
|
|
|
|
if prev_columns < param+1:
|
|
|
|
|
for i in range(prev_columns, param+1):
|
|
|
|
|
for j, (key, items) in enumerate(self._data.items()):
|
|
|
|
|
self._param_table.setItem(j, i, QTableWidgetItem(str(items[-1])))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-11 12:11:37 +03:00
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
app = pg.mkQApp("Parameter Tree Example")
|
|
|
|
|
window = settingsWindow('params\operator_params.json', 'operator')
|
|
|
|
|
app.exec()
|
|
|
|
|
|
|
|
|
|
|