From 021f164419890e1e3c364de8f377766df4fdd99d Mon Sep 17 00:00:00 2001 From: Talley Lambert Date: Tue, 1 Nov 2022 14:46:29 -0400 Subject: [PATCH] fix: fix quantity set value and add test (#131) * fix: fix quantity set value and add test * pin pyside6 * fix: try fix screenshot --- .github/workflows/test_and_deploy.yml | 2 +- setup.cfg | 2 +- src/superqt/spinbox/_quantity.py | 9 +++++++-- tests/test_quantity.py | 10 ++++++++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_and_deploy.yml b/.github/workflows/test_and_deploy.yml index 8bebe26..27fb023 100644 --- a/.github/workflows/test_and_deploy.yml +++ b/.github/workflows/test_and_deploy.yml @@ -115,7 +115,7 @@ jobs: - name: Install for screenshots if: matrix.screenshot - run: pip install . ${{ matrix.backend }} + run: pip install -e .[${{ matrix.backend }}] - name: Screenshots (Linux) if: runner.os == 'Linux' && matrix.screenshot diff --git a/setup.cfg b/setup.cfg index 2575ebd..3ea6a3b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -79,7 +79,7 @@ pyqt6 = pyside2 = pyside2 pyside6 = - pyside6 + pyside6<6.4.0 quantity = pint testing = diff --git a/src/superqt/spinbox/_quantity.py b/src/superqt/spinbox/_quantity.py index 77d8e1c..869d707 100644 --- a/src/superqt/spinbox/_quantity.py +++ b/src/superqt/spinbox/_quantity.py @@ -69,7 +69,7 @@ class QQuantity(QWidget): def __init__( self, - value: Union[str, Quantity, Number], + value: Union[str, Quantity, Number] = 0, units: Union[UnitsContainer, str, Quantity] = None, ureg: Optional[UnitRegistry] = None, parent: Optional[QWidget] = None, @@ -166,7 +166,12 @@ class QQuantity(QWidget): units: Union[UnitsContainer, str, Quantity] = None, ) -> None: """Set the current value (will cast to a pint Quantity).""" - new_val = self._ureg.Quantity(value, units=units) + if isinstance(value, Quantity): + if units is not None: + raise ValueError("Cannot specify units if value is a Quantity") + new_val = self._ureg.Quantity(value.magnitude, units=value.units) + else: + new_val = self._ureg.Quantity(value, units=units) mag_change = new_val.magnitude != self._value.magnitude units_change = new_val.units != self._value.units diff --git a/tests/test_quantity.py b/tests/test_quantity.py index 00e0344..ea61006 100644 --- a/tests/test_quantity.py +++ b/tests/test_quantity.py @@ -1,3 +1,5 @@ +from pint import Quantity + from superqt import QQuantity @@ -29,3 +31,11 @@ def test_qquantity(qtbot): assert w.isDimensionless() assert w.unitsComboBox().currentText() == "-----" assert w.magnitude() == 1 + + +def test_change_qquantity_value(qtbot): + w = QQuantity() + qtbot.addWidget(w) + assert w.value() == Quantity(0) + w.setValue(Quantity("1 meter")) + assert w.value() == Quantity("1 meter")