fix(gui): retours Dom GUI V6 — thème, Administration, Règles, aide

Cinq retours utilisateur sur l'exécutable Windows GUI V6.

- Thème : `_render()` vidait les widgets mais conservait le cache
  `_tab_frames`/`_visible_tab` → l'onglet Utilisation se vidait (TclError
  sur widget détruit) au changement de thème. Reset du cache dans
  `_render()` → onglet actif recréé proprement.
- Onglet principal « Configuration » → « Administration » (clé interne
  inchangée).
- Sous-onglet « Règles  2 » → « Règles » (le « 2 » était un badge non
  câblé).
- Actions de maquette non câblées (Partage Export/Import, Règles Nouvelle
  règle/Recharger/Tester/Fermer) désactivées + suffixe « (à venir) » via
  `_mockup_button` : plus aucune action morte qui semble fonctionner.
- Aide « ? » restaurée (façon V5) : `ui_kit.HelpButton`/`help_button`
  réutilisable ouvrant une fenêtre d'aide en français simple, posée sur
  Utilisation, Administration (Réglages/Masquage/Partage/Règles) et
  À propos. Partage : phrase visible + aide expliquant qu'on partage les
  réglages, jamais les documents patients.

`tests/unit/test_gui_v6_app_shell.py` : régression thème, libellés,
présence d'aide, navigation. 228 tests unit OK (0 régression), self-test
GUI V6 OK. V5/moteur/app_aivanov non touchés, aucune dépendance ajoutée.
Verdict Qwen requis avant push/build/diffusion.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-15 16:39:53 +02:00
parent 13b79db417
commit 6a0a5811a5
6 changed files with 328 additions and 9 deletions

View File

@@ -17,6 +17,14 @@ from gui_v6 import ui_kit
from gui_v6.license_client import LicenseClient, LicenseStatus
from gui_v6.machine_id import default_machine_id
_HELP_ABOUT = (
"Cet écran affiche la version de l'application, les moteurs utilisés et "
"l'identifiant de ce poste.\n\n"
"La licence s'active avec une clef fournie par votre administrateur. "
"L'activation se fait sans envoyer aucun document : seule la clef est vérifiée.\n\n"
"Le traitement des documents reste 100 % local sur ce poste."
)
_STATUS_LABELS = {
"active": "Licence active",
"grace": "Licence en période de grâce",
@@ -58,6 +66,18 @@ class AboutTab(ctk.CTkFrame):
def _build(self) -> None:
p = self._p
# Bandeau d'introduction + aide « ? »
intro = ctk.CTkFrame(self, fg_color="transparent")
intro.pack(fill="x", padx=14, pady=(12, 0))
ctk.CTkLabel(
intro,
text="Informations sur l'application et activation de votre licence.",
text_color=p["text_dim"],
font=ui_kit.font(12),
anchor="w",
).pack(side="left", padx=(2, 6))
ui_kit.help_button(intro, p, _HELP_ABOUT, title="À propos / Licence").pack(side="right", padx=2)
# Grille d'informations
info = ui_kit.Card(self, p, title=" Informations")
info.pack(fill="x", padx=14, pady=(14, 7))