From e7a87897f57fc760fb93b900968aa0f8a14c4de8 Mon Sep 17 00:00:00 2001 From: Gabriel Selzer Date: Tue, 26 Nov 2024 15:53:12 -0600 Subject: [PATCH] fix: minimum size hint for QElidingLabel (#260) --- src/superqt/elidable/_eliding_label.py | 7 +++++++ tests/test_eliding_label.py | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/superqt/elidable/_eliding_label.py b/src/superqt/elidable/_eliding_label.py index 369e193..8ad2d94 100644 --- a/src/superqt/elidable/_eliding_label.py +++ b/src/superqt/elidable/_eliding_label.py @@ -73,3 +73,10 @@ class QElidingLabel(_GenericEliding, QLabel): flags = int(self.alignment() | Qt.TextFlag.TextWordWrap) r = fm.boundingRect(QRect(QPoint(0, 0), self.size()), flags, self._text) return QSize(self.width(), r.height()) + + def minimumSizeHint(self) -> QSize: + # The smallest that self._elidedText can be is just the ellipsis. + fm = QFontMetrics(self.font()) + flags = int(self.alignment() | Qt.TextFlag.TextWordWrap) + r = fm.boundingRect(QRect(QPoint(0, 0), self.size()), flags, "...") + return QSize(r.width(), r.height()) diff --git a/tests/test_eliding_label.py b/tests/test_eliding_label.py index d3751eb..2ec9de9 100644 --- a/tests/test_eliding_label.py +++ b/tests/test_eliding_label.py @@ -69,3 +69,14 @@ def test_wrap_text(): assert isinstance(wrap, list) assert all(isinstance(x, str) for x in wrap) assert 9 <= len(wrap) <= 13 + + +def test_minimum_size_hint(): + # The hint should always just be the space needed for "..." + wdg = QElidingLabel() + size_hint = wdg.minimumSizeHint() + # Regardless of what text is contained + wdg.setText(TEXT) + new_hint = wdg.minimumSizeHint() + assert size_hint.width() == new_hint.width() + assert size_hint.height() == new_hint.height()