From 135f0970799dfc87b8024f894eb5de3e76923c99 Mon Sep 17 00:00:00 2001 From: alro1965 Date: Wed, 27 May 2026 00:35:03 -0400 Subject: [PATCH] =?UTF-8?q?fix(ribbon):=20calcular=20ancho=20m=C3=ADnimo?= =?UTF-8?q?=20de=20botones=20desde=20m=C3=A9tricas=20de=20texto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Qt dimensiona QToolButton por el ícono (22px), no por el texto, lo que causaba que etiquetas como 'Nuevo Tq.' se cortaran al renderizar. Ahora add_button() usa fontMetrics().horizontalAdvance(text)+20 para establecer setMinimumWidth() correcto en cada botón. Además: RibbonBar.setFixedHeight(110) (antes 92), padding y font-size del ribbonButton QSS aumentados ligeramente para mejor legibilidad. Co-Authored-By: Claude Sonnet 4.5 --- arshipdesign/ui/main_window.py | 10 +++++++++- arshipdesign/ui/themes/dark.qss | 13 +++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/arshipdesign/ui/main_window.py b/arshipdesign/ui/main_window.py index 15c4b5d..1c90f8b 100644 --- a/arshipdesign/ui/main_window.py +++ b/arshipdesign/ui/main_window.py @@ -689,6 +689,14 @@ class RibbonGroup(QFrame): btn.setEnabled(enabled) if slot: btn.clicked.connect(slot) + + # Forzar ancho mínimo basado en el texto para que nunca se parta en 2 líneas. + # Qt calcula el ancho por el ícono (22 px), no por el texto → + # "Nuevo Tq." se rompe y la segunda línea queda cortada. + fm = btn.fontMetrics() + min_w = max(56, fm.horizontalAdvance(text) + 20) + btn.setMinimumWidth(min_w) + self._btn_lo.addWidget(btn) return btn @@ -709,7 +717,7 @@ class RibbonBar(QWidget): def __init__(self, parent: Optional[QWidget] = None) -> None: super().__init__(parent) self.setObjectName("ribbonBar") - self.setFixedHeight(92) + self.setFixedHeight(110) # 26 tab-row + 84 content (suficiente para 22px icon + texto 1 línea + título grupo) self._tab_btns: list[QToolButton] = [] self._build_ui() diff --git a/arshipdesign/ui/themes/dark.qss b/arshipdesign/ui/themes/dark.qss index 5831ba5..d22aab6 100644 --- a/arshipdesign/ui/themes/dark.qss +++ b/arshipdesign/ui/themes/dark.qss @@ -119,17 +119,18 @@ QFrame#ribbonSep { } /* ── Botones de la ribbon ── - enabled: texto blanco claro #e2e7f5 - disabled: texto gris legible #7a8ba8 (contraste ≥ 3.5:1 sobre #343848) - SIN max-width para que el texto nunca se corte */ + • font-size 12px para legibilidad clara + • min-width se fuerza desde Python (fontMetrics) para nunca partir en 2 líneas + • SIN max-width — texto siempre completo + • disabled: #7a8ba8 — contraste ≥ 3.5:1 sobre #343848 */ QToolButton#ribbonButton { background: transparent; color: #e2e7f5; border: 1px solid transparent; border-radius: 3px; - padding: 4px 8px 2px 8px; - font-size: 11px; - min-width: 48px; + padding: 5px 10px 3px 10px; + font-size: 12px; + min-width: 56px; } QToolButton#ribbonButton:hover { background-color: #3e4255; border-color: #575e74; } QToolButton#ribbonButton:pressed { background-color: #4da8ff; color: #fff; border-color: #4da8ff; }