From 38e0630743c6586ddb4c2ea89a1aedc166b1262f Mon Sep 17 00:00:00 2001 From: Tim Monko Date: Thu, 1 Jan 2026 21:13:07 -0600 Subject: [PATCH 1/8] add test that fails on main with the issues --- tests/zz_test_sliders/test_labeled_slider.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/zz_test_sliders/test_labeled_slider.py b/tests/zz_test_sliders/test_labeled_slider.py index 2a86bfe8..c168886f 100644 --- a/tests/zz_test_sliders/test_labeled_slider.py +++ b/tests/zz_test_sliders/test_labeled_slider.py @@ -84,3 +84,18 @@ def test_editing_float(qtbot): slider._label.setValue(0.5) slider._label.editingFinished.emit() assert slider.value() == 0.5 + + +def test_slider_label_value(qtbot): + slider = QLabeledDoubleSlider() + qtbot.addWidget(slider) + + slider.setRange(-180, 180) + assert slider._label._min == -180 + assert slider._label._max == 180 + + slider.setValue(150) + assert slider.value() == 150 == slider._label.value() + + slider.setValue(-90) + assert slider.value() == -90 == slider._label.value() From c39227aaae2bd3b5336f0f02b98d65fa5a5ddf3b Mon Sep 17 00:00:00 2001 From: Tim Monko Date: Thu, 1 Jan 2026 21:14:05 -0600 Subject: [PATCH 2/8] set label range on slider range change --- src/superqt/sliders/_labeled.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/superqt/sliders/_labeled.py b/src/superqt/sliders/_labeled.py index afd3f563..4b07f499 100644 --- a/src/superqt/sliders/_labeled.py +++ b/src/superqt/sliders/_labeled.py @@ -295,6 +295,7 @@ def setEdgeLabelPosition(self, opt: LabelPosition) -> None: # --------------------- private api -------------------- def _on_slider_range_changed(self, min_: int, max_: int) -> None: + self._label.setRange(min_, max_) if self._edge_label_mode & EdgeLabelMode.LabelIsRange: self._label.setSuffix(f" / {max_}") else: From af7b948d1220e4fc7388abdeb8cbe9e31675ccb3 Mon Sep 17 00:00:00 2001 From: Tim Monko Date: Fri, 2 Jan 2026 09:47:54 -0600 Subject: [PATCH 3/8] setRange in SliderLabel on rangeChanged instead of in QLabeledSlider --- src/superqt/sliders/_labeled.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/superqt/sliders/_labeled.py b/src/superqt/sliders/_labeled.py index 4b07f499..d5d8f3e5 100644 --- a/src/superqt/sliders/_labeled.py +++ b/src/superqt/sliders/_labeled.py @@ -295,7 +295,6 @@ def setEdgeLabelPosition(self, opt: LabelPosition) -> None: # --------------------- private api -------------------- def _on_slider_range_changed(self, min_: int, max_: int) -> None: - self._label.setRange(min_, max_) if self._edge_label_mode & EdgeLabelMode.LabelIsRange: self._label.setSuffix(f" / {max_}") else: @@ -684,6 +683,7 @@ def __init__( validator.setNotation(QDoubleValidator.Notation.ScientificNotation) self.setValidator(validator) + slider.rangeChanged.connect(self.setRange) slider.rangeChanged.connect(self._update_size) self.setAlignment(alignment) self.setStyleSheet("background:transparent; border: 0;") From e9157aacb0c476139df9079d2d81f2024f03ea65 Mon Sep 17 00:00:00 2001 From: Tim Monko Date: Fri, 2 Jan 2026 10:06:40 -0600 Subject: [PATCH 4/8] add decimal test that fails on main --- tests/zz_test_sliders/test_labeled_slider.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/zz_test_sliders/test_labeled_slider.py b/tests/zz_test_sliders/test_labeled_slider.py index c168886f..e120c2f9 100644 --- a/tests/zz_test_sliders/test_labeled_slider.py +++ b/tests/zz_test_sliders/test_labeled_slider.py @@ -99,3 +99,19 @@ def test_slider_label_value(qtbot): slider.setValue(-90) assert slider.value() == -90 == slider._label.value() + + +def test_slider_label_decimals_update_text(qtbot): + slider = QLabeledDoubleSlider() + qtbot.addWidget(slider) + + # Set a value with default 2 decimals + slider.setValue(3.14159) + assert slider.value() == 3.14159 + assert slider._label.text() == "3.14" + + slider.setDecimals(0) + assert slider._label.text() == "3" + + slider.setDecimals(4) + assert slider._label.text() == "3.1416" From b8e102ff8b7d556ca69aee24a4e0b409f69ab997 Mon Sep 17 00:00:00 2001 From: Tim Monko Date: Fri, 2 Jan 2026 10:06:57 -0600 Subject: [PATCH 5/8] updateText after setDecimals --- src/superqt/sliders/_labeled.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/superqt/sliders/_labeled.py b/src/superqt/sliders/_labeled.py index d5d8f3e5..bd8aff61 100644 --- a/src/superqt/sliders/_labeled.py +++ b/src/superqt/sliders/_labeled.py @@ -677,8 +677,7 @@ def __init__( self._decimals = -1 self.setFocusPolicy(Qt.FocusPolicy.ClickFocus) self.setMode(EdgeLabelMode.LabelIsValue) - self.setDecimals(0) - self.setText(str(self._value)) + self.setDecimals(0) # calls updateText validator = QDoubleValidator(self) validator.setNotation(QDoubleValidator.Notation.ScientificNotation) self.setValidator(validator) @@ -714,6 +713,7 @@ def setRange(self, min_: float, max_: float) -> None: def setDecimals(self, prec: int) -> None: # super().setDecimals(prec) self._decimals = prec + self.updateText() self._update_size() def decimals(self) -> int: From 94199305979409a32526c85ec866fbc4d357c530 Mon Sep 17 00:00:00 2001 From: Tim Monko Date: Fri, 2 Jan 2026 10:06:40 -0600 Subject: [PATCH 6/8] add decimal test that fails on main --- tests/zz_test_sliders/test_labeled_slider.py | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/zz_test_sliders/test_labeled_slider.py b/tests/zz_test_sliders/test_labeled_slider.py index 2a86bfe8..977424f8 100644 --- a/tests/zz_test_sliders/test_labeled_slider.py +++ b/tests/zz_test_sliders/test_labeled_slider.py @@ -84,3 +84,37 @@ def test_editing_float(qtbot): slider._label.setValue(0.5) slider._label.editingFinished.emit() assert slider.value() == 0.5 +<<<<<<< HEAD +======= + + +def test_slider_label_value(qtbot): + slider = QLabeledDoubleSlider() + qtbot.addWidget(slider) + + slider.setRange(-180, 180) + assert slider._label._min == -180 + assert slider._label._max == 180 + + slider.setValue(150) + assert slider.value() == 150 == slider._label.value() + + slider.setValue(-90) + assert slider.value() == -90 == slider._label.value() + + +def test_slider_label_decimals_update_text(qtbot): + slider = QLabeledDoubleSlider() + qtbot.addWidget(slider) + + # Set a value with default 2 decimals + slider.setValue(3.14159) + assert slider.value() == 3.14159 + assert slider._label.text() == "3.14" + + slider.setDecimals(0) + assert slider._label.text() == "3" + + slider.setDecimals(4) + assert slider._label.text() == "3.1416" +>>>>>>> e9157aa (add decimal test that fails on main) From 5daed25303c279defb3143f1cc127ec8424d16f6 Mon Sep 17 00:00:00 2001 From: Tim Monko Date: Fri, 2 Jan 2026 10:06:57 -0600 Subject: [PATCH 7/8] updateText after setDecimals --- src/superqt/sliders/_labeled.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/superqt/sliders/_labeled.py b/src/superqt/sliders/_labeled.py index afd3f563..048eeeca 100644 --- a/src/superqt/sliders/_labeled.py +++ b/src/superqt/sliders/_labeled.py @@ -677,8 +677,7 @@ def __init__( self._decimals = -1 self.setFocusPolicy(Qt.FocusPolicy.ClickFocus) self.setMode(EdgeLabelMode.LabelIsValue) - self.setDecimals(0) - self.setText(str(self._value)) + self.setDecimals(0) # calls updateText validator = QDoubleValidator(self) validator.setNotation(QDoubleValidator.Notation.ScientificNotation) self.setValidator(validator) @@ -713,6 +712,7 @@ def setRange(self, min_: float, max_: float) -> None: def setDecimals(self, prec: int) -> None: # super().setDecimals(prec) self._decimals = prec + self.updateText() self._update_size() def decimals(self) -> int: From 3aea1ab4d4d7fba769c87b3cde1a174d6ea195c8 Mon Sep 17 00:00:00 2001 From: Tim Monko Date: Fri, 2 Jan 2026 10:17:30 -0600 Subject: [PATCH 8/8] undo the range change connection --- src/superqt/sliders/_labeled.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/superqt/sliders/_labeled.py b/src/superqt/sliders/_labeled.py index bd8aff61..048eeeca 100644 --- a/src/superqt/sliders/_labeled.py +++ b/src/superqt/sliders/_labeled.py @@ -682,7 +682,6 @@ def __init__( validator.setNotation(QDoubleValidator.Notation.ScientificNotation) self.setValidator(validator) - slider.rangeChanged.connect(self.setRange) slider.rangeChanged.connect(self._update_size) self.setAlignment(alignment) self.setStyleSheet("background:transparent; border: 0;")