Skip to content

Commit 20cd80b

Browse files
fix(parameters): remove default initialization
1 parent fc52d20 commit 20cd80b

File tree

1 file changed

+42
-28
lines changed

1 file changed

+42
-28
lines changed

qt_parameters/widgets.py

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ def __init__(self, name: str = '', parent: QtWidgets.QWidget | None = None) -> N
3232

3333
self._init_layout()
3434
self._init_ui()
35-
self._init_defaults()
3635

3736
if name:
3837
self.set_name(name)
@@ -43,26 +42,12 @@ def __repr__(self) -> str:
4342

4443
def _init_layout(self) -> None:
4544
self._layout = QtWidgets.QHBoxLayout()
46-
self.setLayout(self._layout)
4745
self._layout.setContentsMargins(0, 0, 0, 0)
46+
self.setLayout(self._layout)
4847

4948
def _init_ui(self) -> None:
5049
pass
5150

52-
def _init_defaults(self) -> None:
53-
self.blockSignals(True)
54-
attributes = dir(self.__class__)
55-
for name in attributes:
56-
if not name.startswith('_') or name.startswith('__') or name == '_value':
57-
continue
58-
try:
59-
setter = getattr(self, f'set{name}')
60-
value = getattr(self, name)
61-
except AttributeError:
62-
continue
63-
setter(value)
64-
self.blockSignals(False)
65-
6651
def changeEvent(self, event: QtCore.QEvent) -> None:
6752
if event.type() == QtCore.QEvent.Type.EnabledChange:
6853
self.enabled_changed.emit(self.isEnabled())
@@ -120,11 +105,13 @@ class IntParameter(ParameterWidget):
120105
def _init_ui(self) -> None:
121106
# Line
122107
self.line = IntLineEdit(self)
108+
self.line.set_value(self._value)
123109
self.line.value_changed.connect(self._line_value_changed)
124110
self._layout.addWidget(self.line)
125111

126112
# Slider
127113
self.slider = IntSlider()
114+
self.slider.set_maximum(self._slider_max)
128115
self.slider.value_changed.connect(self._slider_value_changed)
129116
# Prevent any size changes when slider shows
130117
self.slider.setMaximumHeight(self.line.minimumSizeHint().height())
@@ -225,10 +212,13 @@ def _init_ui(self) -> None:
225212
# line
226213
self.line = FloatLineEdit(self)
227214
self.line.value_changed.connect(self._line_value_changed)
215+
self.line.set_value(self._value)
216+
self.line.set_decimals(self._decimals)
228217
self._layout.addWidget(self.line)
229218

230219
# slider
231220
self.slider = FloatSlider()
221+
self.slider.set_maximum(self._slider_max)
232222
self.slider.value_changed.connect(self._slider_value_changed)
233223
# prevent any size changes when slider shows
234224
self.slider.setMaximumHeight(self.line.minimumSizeHint().height())
@@ -646,9 +636,9 @@ def set_value(self, value: bool) -> None:
646636

647637

648638
class MultiIntParameter(IntParameter):
649-
multi_count = 2
650639
value_changed: QtCore.Signal = QtCore.Signal(tuple)
651640

641+
_count: int = 2
652642
_value: tuple[int, ...] = (0, 0)
653643
_default: tuple[int, ...] = (0, 0)
654644
_keep_ratio: bool = True
@@ -659,18 +649,20 @@ def _init_ui(self) -> None:
659649
self.lines = []
660650
for i in range(self._count):
661651
line = IntLineEdit()
652+
line.set_value(0)
662653
line.value_changed.connect(self._line_value_changed)
663654
self._layout.addWidget(line)
664655
self.lines.append(line)
665656

666657
# Slider
667658
self.slider = IntSlider()
659+
self.slider.set_maximum(self._slider_max)
668660
self.slider.value_changed.connect(self._slider_value_changed)
669661
# Prevent any size changes when slider shows
670662
line_height = self.lines[0].minimumSizeHint().height()
671663
self.slider.setMaximumHeight(line_height)
672664
self._layout.addWidget(self.slider)
673-
self._layout.setStretch(self.multi_count, 1)
665+
self._layout.setStretch(self._count, 1)
674666

675667
# Keep ratio button
676668
self.keep_ratio_button = RatioButton()
@@ -679,6 +671,7 @@ def _init_ui(self) -> None:
679671
self._layout.addWidget(self.keep_ratio_button)
680672

681673
self.setFocusProxy(self.lines[0])
674+
self.set_keep_ratio(self._keep_ratio)
682675

683676
def resizeEvent(self, event: QtGui.QResizeEvent) -> None:
684677
QtWidgets.QWidget.resizeEvent(self, event)
@@ -730,14 +723,14 @@ def set_value(self, value: Sequence) -> None:
730723
if not all(values[0] == x for x in values):
731724
self.set_keep_ratio(False)
732725
if self._keep_ratio:
733-
values = (values[0],) * self.multi_count
726+
values = (values[0],) * self._count
734727
ParameterWidget.set_value(self, self._cast_to_type(values))
735728
self._set_slider_value(values[0])
736729
self._set_line_values(values)
737730

738731
def _line_value_changed(self, value: int) -> None:
739732
if self._keep_ratio:
740-
values = (self.lines[0].value(),) * self.multi_count
733+
values = (self.lines[0].value(),) * self._count
741734
for line in self.lines[1:]:
742735
line.set_value(values[0])
743736
else:
@@ -748,7 +741,7 @@ def _line_value_changed(self, value: int) -> None:
748741
self._set_slider_value(values[0])
749742

750743
def _slider_value_changed(self, value: int) -> None:
751-
values = (value,) * self.multi_count
744+
values = (value,) * self._count
752745
value = self._cast_to_type(values)
753746
ParameterWidget.set_value(self, value)
754747
self._set_line_values(values)
@@ -765,6 +758,7 @@ def _cast_to_tuple(self, values: Any) -> tuple[int, ...]:
765758
def _cast_to_type(self, values: tuple[int, ...]) -> Any:
766759
return values
767760

761+
768762
class MultiFloatParameter(MultiIntParameter):
769763
_value: tuple[float, ...] = (0, 0)
770764
_default: tuple[float, ...] = (0, 0)
@@ -775,30 +769,34 @@ class MultiFloatParameter(MultiIntParameter):
775769
_decimals: int = 4
776770

777771
def _init_ui(self) -> None:
778-
# lines
772+
# Lines
779773
self.lines = []
780-
for i in range(self.multi_count):
774+
for i in range(self._count):
781775
line = FloatLineEdit()
776+
line.set_value(0)
777+
line.set_decimals(self._decimals)
782778
line.value_changed.connect(self._line_value_changed)
783779
self._layout.addWidget(line)
784780
self.lines.append(line)
785781

786-
# slider
782+
# Slider
787783
self.slider = FloatSlider()
784+
self.slider.set_maximum(self._slider_max)
788785
self.slider.value_changed.connect(self._slider_value_changed)
789-
# prevent any size changes when slider shows
786+
# Prevent any size changes when slider shows
790787
line_height = self.lines[0].minimumSizeHint().height()
791788
self.slider.setMaximumHeight(line_height)
792789
self._layout.addWidget(self.slider)
793-
self._layout.setStretch(self.multi_count, 1)
790+
self._layout.setStretch(self._count, 1)
794791

795-
# keep ratio button
792+
# Keep ratio button
796793
self.keep_ratio_button = RatioButton()
797794
self.keep_ratio_button.setMaximumSize(line_height, line_height)
798795
self.keep_ratio_button.toggled.connect(self.set_keep_ratio)
799796
self._layout.addWidget(self.keep_ratio_button)
800797

801798
self.setFocusProxy(self.lines[0])
799+
self.set_keep_ratio(self._keep_ratio)
802800

803801
def decimals(self) -> int:
804802
return self._decimals
@@ -838,6 +836,7 @@ def value(self) -> tuple[float, ...]:
838836
def set_value(self, value: tuple[float, ...]) -> None:
839837
super().set_value(value)
840838

839+
841840
class PointParameter(MultiIntParameter):
842841
value_changed: QtCore.Signal = QtCore.Signal(QtCore.QPoint)
843842

@@ -846,6 +845,11 @@ class PointParameter(MultiIntParameter):
846845
_slider_visible: bool = False
847846
_ratio_visible: bool = False
848847

848+
def _init_ui(self) -> None:
849+
super()._init_ui()
850+
self.set_slider_visible(self._slider_visible)
851+
self.set_ratio_visible(self._ratio_visible)
852+
849853
def set_value(self, value: QtCore.QPoint | Sequence) -> None:
850854
super().set_value(value)
851855

@@ -867,6 +871,11 @@ class PointFParameter(MultiFloatParameter):
867871
_slider_visible: bool = False
868872
_ratio_visible: bool = False
869873

874+
def _init_ui(self) -> None:
875+
super()._init_ui()
876+
self.set_slider_visible(self._slider_visible)
877+
self.set_ratio_visible(self._ratio_visible)
878+
870879
def set_value(self, value: QtCore.QPointF | Sequence) -> None:
871880
super().set_value(value) # noqa
872881

@@ -919,9 +928,9 @@ def _cast_to_tuple(self, value: QtCore.QSizeF) -> tuple[float, ...]:
919928

920929

921930
class ColorParameter(MultiFloatParameter):
922-
multi_count = 3
923931
value_changed: QtCore.Signal = QtCore.Signal(QtGui.QColor)
924932

933+
_count: int = 3
925934
_value: QtGui.QColor = QtGui.QColor(0, 0, 0)
926935
_default: QtGui.QColor = QtGui.QColor(0, 0, 0)
927936
_color_min: float | None = 0
@@ -930,6 +939,10 @@ class ColorParameter(MultiFloatParameter):
930939

931940
def _init_ui(self) -> None:
932941
super()._init_ui()
942+
943+
for line in self.lines:
944+
line.set_maximum(self._color_max)
945+
933946
self.button = QtWidgets.QPushButton()
934947
self.button.clicked.connect(self.select_color)
935948
self.button.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
@@ -1419,6 +1432,7 @@ def __init__(self, parent: QtWidgets.QWidget | None = None) -> None:
14191432
size = self.iconSize().width()
14201433
self.setMaximumSize(QtCore.QSize(size, size))
14211434
self.setCheckable(True)
1435+
self._checked_change(False)
14221436

14231437
def _checked_change(self, checked: bool) -> None:
14241438
# BUG: fusion style does not recognize On/Off for QIcons

0 commit comments

Comments
 (0)