fix(ribbon): calcular ancho mínimo de botones desde métricas de texto

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 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 00:35:03 -04:00
parent 0c15b5aeeb
commit 135f097079
2 changed files with 16 additions and 7 deletions
+9 -1
View File
@@ -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()
+7 -6
View File
@@ -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; }