fix(ui): mesurer la fenêtre après remise à plat des layouts (v0.8.3)

Le bouton « Saisir le code d'accès » était créé et placé, mais sous le bord
inférieur : rendre un widget visible ne met pas les layouts à jour dans la
foulée — Qt poste un LayoutRequest traité au tour de boucle suivant. La
fenêtre, de hauteur fixe recalculée à chaque changement de contenu, se
mesurait avant ce traitement et obtenait une hauteur en retard d'un cycle.

Le symptôme était déjà visible dans les tests de la v0.8.2 : la hauteur
montait bien de 258 à 298 px à l'apparition du bouton, mais ne redescendait
jamais à sa disparition. J'avais mis cette asymétrie sur le compte du
backend graphique de test au lieu d'y voir le retard lui-même.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-06 13:55:55 +02:00
co-authored by Claude Opus 5
parent 996bbe240d
commit 1e015b5a1f
6 changed files with 29 additions and 9 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
__version__ = "0.8.2"
__version__ = "0.8.3"
APP_NAME = "WGSecure"
APP_SHORT = "WGS"
+18 -5
View File
@@ -1,11 +1,12 @@
from __future__ import annotations
from PyQt6.QtWidgets import (
QApplication,
QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QPushButton, QFrame, QMessageBox, QInputDialog,
QLineEdit, QListWidget, QListWidgetItem,
QComboBox,
)
from PyQt6.QtCore import Qt, QTimer, QDateTime
from PyQt6.QtCore import Qt, QTimer, QDateTime, QEvent
from PyQt6.QtGui import QFont, QCloseEvent, QColor
from app.core.config import Config
@@ -373,13 +374,25 @@ class MainWindow(QMainWindow):
"""Réajuste la hauteur fixe de la fenêtre à son contenu visible.
La fenêtre reste de taille fixe (pas de redimensionnement manuel),
mais cette taille change avec le repli/dépli du détail — il faut
donc lever la contrainte précédente avant de laisser le layout
recalculer sa hauteur naturelle, puis la reverrouiller.
mais cette taille change avec le repli/dépli du détail et avec
l'apparition du bouton de code d'accès — il faut donc lever la
contrainte précédente avant de laisser le layout recalculer sa
hauteur naturelle, puis la reverrouiller.
Le rendre visible ne suffit pas à mettre les layouts à jour : Qt
poste un `LayoutRequest` traité au tour de boucle suivant, et
mesurer avant ce traitement rend une hauteur en retard d'un cycle.
La fenêtre gardait alors sa taille précédente et rognait le widget
qui venait d'apparaître — le bouton « Saisir le code d'accès »
existait, mais sous le bord inférieur. D'où la remise à plat
explicite des layouts avant toute mesure.
"""
self.setMinimumHeight(0)
self.setMaximumHeight(16777215)
self.centralWidget().adjustSize()
central = self.centralWidget()
QApplication.sendPostedEvents(None, QEvent.Type.LayoutRequest)
central.layout().activate()
central.adjustSize()
self.adjustSize()
self.setFixedHeight(self.sizeHint().height())