Ensemble: Edit: Add parameters widgets.

This commit is contained in:
parouby committed 2026-09-18 10:32:45 +02:00
1 parent a2e0f6a517
commit ff3b5a320c
5 files changed
+136 -14

No files matched your search

+126 -5
View File
@@ -39,6 +39,7 @@ from PyQt5.QtWidgets import (
QFileDialog, QTableView, QAbstractItemView, QFileDialog, QTableView, QAbstractItemView,
QUndoStack, QShortcut, QAction, QItemDelegate, QUndoStack, QShortcut, QAction, QItemDelegate,
QComboBox, QVBoxLayout, QHeaderView, QTabWidget, QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
QGroupBox,
) )
logger = logging.getLogger() logger = logging.getLogger()
@@ -60,28 +61,73 @@ class EnsembleEditDialog(PamhyrDialog):
self._study = study self._study = study
self._ensemble = ensemble self._ensemble = ensemble
self._init_default_parameters_widget()
self._init_default_values() self._init_default_values()
def _init_default_parameters_widget(self):
pass
def _init_default_values(self): def _init_default_values(self):
self.set_line_edit_text("lineEdit_name", self._ensemble.name) self.set_line_edit_text("lineEdit_name", self._ensemble.name)
self.combobox_add_items( self.combobox_add_items(
"comboBox_distribution", "comboBox_distribution",
[self._trad["not_defined"]] +
list( list(
map( map(
lambda f: f.name, lambda d: d.name,
self._study._ens_distributions.lst self._study._ens_distributions.lst
) )
) )
) )
self._params_widget = None
if self._ensemble.distribution is not None: if self._ensemble.distribution is not None:
self.set_combobox_text("comboBox_distribution", self.set_combobox_text("comboBox_distribution",
self._ensemble.distribution.name) self._ensemble.distribution.name)
self._set_widget(self._ensemble.distribution)
self.find(QComboBox, "comboBox_distribution")\
.currentTextChanged.connect(self.update_distribution)
def update_distribution(self, txt):
# txt = self.get_combobox_text("comboBox_distribution")
distribution = next(
filter(
lambda d: d.name == txt,
self._study._ens_distributions.lst
),
None
)
self._set_widget(distribution)
def _set_widget(self, distribution):
box = self.find(QGroupBox, "groupBox_params")
vbox = self.find(QVBoxLayout, "verticalLayout_params")
if self._params_widget is not None:
vbox.removeWidget(self._params_widget)
self._params_widget.setParent(None)
if distribution is None:
return
size = len(distribution._labels)
if size == 1:
self._params_widget = Ensemble1ParamsWidget(
ensemble=self._ensemble,
distribution=distribution,
trad=self._trad, parent=box,
)
vbox.addWidget(self._params_widget)
elif size == 2:
self._params_widget = Ensemble2ParamsWidget(
ensemble=self._ensemble,
distribution=distribution,
trad=self._trad, parent=box,
)
vbox.addWidget(self._params_widget)
else:
self._params_widget = None
@property @property
def values(self): def values(self):
return self._values return self._values
@@ -92,3 +138,78 @@ class EnsembleEditDialog(PamhyrDialog):
def reject(self): def reject(self):
self.close() self.close()
class Ensemble1ParamsWidget(PamhyrWidget):
_pamhyr_ui = "Ensemble1ParamsWidget"
_pamhyr_name = "Parameters"
def __init__(self, ensemble=None,
distribution=None,
trad=None, parent=None):
super(Ensemble1ParamsWidget, self).__init__(
parent=parent
)
self._trad = trad
self._ensemble = ensemble
self._distribution = distribution
self._labels = distribution.labels
self._init_default_labels()
self._init_default_values()
def _init_default_labels(self):
self.set_label_text("label_0", self._trad[self._labels[0]])
def _init_default_values(self):
self._values = self._ensemble.params
if len(self._values) > 0:
self.set_double_spin_box("doubleSpinBox_0", self._values[0])
@property
def values(self):
self._values = [
self.get_double_spin_box("doubleSpinBox_0"),
]
return self._values
class Ensemble2ParamsWidget(PamhyrWidget):
_pamhyr_ui = "Ensemble2ParamsWidget"
_pamhyr_name = "Parameters"
def __init__(self, ensemble=None,
distribution=None,
trad=None, parent=None):
super(Ensemble2ParamsWidget, self).__init__(
parent=parent
)
self._trad = trad
self._ensemble = ensemble
self._distribution = distribution
self._labels = distribution.labels
self._init_default_labels()
self._init_default_values()
def _init_default_labels(self):
self.set_label_text("label_0", self._trad[self._labels[0]])
self.set_label_text("label_1", self._trad[self._labels[1]])
def _init_default_values(self):
self._values = self._ensemble.params
if len(self._values) > 0:
self.set_double_spin_box("doubleSpinBox_0", self._values[0])
self.set_double_spin_box("doubleSpinBox_1", self._values[1])
@property
def values(self):
self._values = [
self.get_double_spin_box("doubleSpinBox_0"),
self.get_double_spin_box("doubleSpinBox_1")
]
return self._values
+2 -1
View File
@@ -93,7 +93,8 @@ class SetDistributionCommand(QUndoCommand):
def redo(self): def redo(self):
self._ensembles.get(self._index).distribution = self._new self._ensembles.get(self._index).distribution = self._new
self._ensembles.get(self._index).params = self._new.default_values if self._new is not None:
self._ensembles.get(self._index).params = self._new.default_values
class AddCommand(QUndoCommand): class AddCommand(QUndoCommand):
+2 -2
View File
@@ -66,13 +66,13 @@
</widget> </widget>
</item> </item>
<item row="1" column="2" colspan="3"> <item row="1" column="2" colspan="3">
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox_params">
<property name="title"> <property name="title">
<string>Parameters</string> <string>Parameters</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0"> <item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_parameters"/> <layout class="QVBoxLayout" name="verticalLayout_params"/>
</item> </item>
</layout> </layout>
</widget> </widget>
@@ -17,14 +17,14 @@
<item row="0" column="0"> <item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QLabel" name="label"> <widget class="QLabel" name="label_0">
<property name="text"> <property name="text">
<string>Parameter 1</string> <string>Parameter 1</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QDoubleSpinBox" name="doubleSpinBox"/> <widget class="QDoubleSpinBox" name="doubleSpinBox_0"/>
</item> </item>
</layout> </layout>
</item> </item>
@@ -15,24 +15,24 @@
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label_0">
<property name="text"> <property name="text">
<string>Parameter 1</string> <string>Parameter 1</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_1"/> <widget class="QDoubleSpinBox" name="doubleSpinBox_0"/>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_1">
<property name="text"> <property name="text">
<string>Parameter 2</string> <string>Parameter 2</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_2"/> <widget class="QDoubleSpinBox" name="doubleSpinBox_1"/>
</item> </item>
</layout> </layout>
</widget> </widget>