Refresca bé el canvi de tema en calent

setPalette no repolia els widgets ja creats: els stylesheets amb palette(...)
(pills) no es reresolien i la consola de log no repintava el fons. apply_theme
ara fa unpolish→polish→update a tots els widgets, i en canviar de tema es
reconstrueixen les files perquè els pills agafin la paleta nova.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-30 10:20:47 +02:00
parent e0a93a9c28
commit 93efbb06c4
2 changed files with 19 additions and 0 deletions
+4
View File
@@ -175,6 +175,10 @@ class MainWindow(QMainWindow):
app = QApplication.instance()
if app is not None:
theme.apply_theme(app, mode)
# Reconstruir las filas: los pills usan `palette(...)` en su stylesheet, que
# Qt cachea; recrearlos los re-resuelve contra la paleta ya aplicada.
for row in self.rows.values():
row.refresh()
def _configure_token(self) -> None:
token, ok = QInputDialog.getText(
+15
View File
@@ -120,6 +120,20 @@ def resolve_is_dark(app: QApplication, mode: str) -> bool:
return system_is_dark(app) # THEME_SYSTEM (o valor desconocido)
def _repolish_all(app: QApplication) -> None:
"""Re-poliza todos los widgets para que adopten la nueva paleta en caliente.
``setPalette`` por sí solo no repinta los widgets ya creados: los que tienen
stylesheet (pills) no re-resuelven ``palette(...)`` y algunos fondos base (la
consola de log) no se redibujan. unpolish→polish→update fuerza ese refresco.
"""
for widget in app.allWidgets():
style = widget.style()
style.unpolish(widget)
style.polish(widget)
widget.update()
def apply_theme(app: QApplication, mode: str = THEME_SYSTEM) -> None:
"""Aplica estilo Fusion + paleta clara/oscura según el modo elegido."""
app.setStyle("Fusion")
@@ -127,6 +141,7 @@ def apply_theme(app: QApplication, mode: str = THEME_SYSTEM) -> None:
app.setPalette(_dark_palette())
else:
app.setPalette(app.style().standardPalette())
_repolish_all(app)
def watch_system_theme(app: QApplication, should_follow: Callable[[], bool]) -> None: