Erprobungshinweis: erst wenn das Fenster steht, und nach vorn geholt

Sein Befund: "die software haengt nun am dialog popup" - und gleich darauf:
"haengen tut er nicht, nur deine pruefung; wenn ich auf aktiv druecke, geht es".

Zwei getrennte Fehler, beide meine:

1. Der Hinweis lief an after(0). Da ist das Hauptfenster noch nicht gezeichnet -
   ein modaler Dialog daran wirkt eingefroren. Eine feste Wartezeit (150 ms) war
   aber auch falsch: die erreicht ein Pruefstand nie, der keine Ereignisschleife
   dreht, und pruef_api lief danach in die Zeitgrenze. Jetzt after_idle: laeuft,
   sobald Tk nichts mehr zu zeichnen hat - fuer den Nutzer nach dem Zeichnen,
   fuer den Pruefstand beim ersten update().

2. Der Dialog kam nicht nach vorn. Ein Hinweis, den man erst suchen muss, taugt
   nichts. theme.py holt das Meldungsfenster jetzt nach vorn und nimmt den
   Tastaturfokus (lift, kurz topmost, focus_force).

In der Aufgabenliste vermerkt: Updater als Starter (Schritt 4, mit den zwei
fehlenden Voraussetzungen Versionsnummer und Sichtbarkeit der Repositories),
Pcore-Design im Steuerrechnungstool (Schritt 5), und der ALTFEHLER in
pruef_wache - schon vor den heutigen Arbeiten rot, die Statuszeile wird vom
Ergebnis des Einlesens ueberschrieben.

Alle 17 Pruefstaende des Rechnungstools gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
This commit is contained in:
TheMockTv 2026-09-06 16:24:43 +02:00
parent 4cdc286d5b
commit 05ec56e4b8
3 changed files with 74 additions and 4 deletions

10
app.py
View file

@ -118,10 +118,11 @@ class RechnungsApp(ThemeMixin, MeldungMixin, KorrekturMixin, EinstellungenMixin,
# es morgen ohne berichtigte Rechnung im Ordner und keiner weiss warum.
self.protocol("WM_DELETE_WINDOW", self._beenden)
# NICHTS laeuft an, bevor der Erprobungshinweis bestaetigt ist. Wer ihn
# ablehnt, soll gar nicht erst arbeiten koennen - und es soll auch kein
# halb gestartetes Programm hinter dem Fenster stehenbleiben.
self.after(0, self._hinweis_pruefen)
# after_idle statt after(0): laeuft, sobald Tk nichts mehr zu zeichnen hat -
# also nachdem das Hauptfenster steht. Bei after(0) haengt der modale Dialog
# an einem noch ungezeichneten Fenster und wirkt wie eingefroren; eine feste
# Wartezeit dagegen erreicht ein Pruefstand nie, der keine Schleife dreht.
self.after_idle(self._hinweis_pruefen)
# ---------------------------------------------------------------- Menue
@ -650,6 +651,7 @@ class RechnungsApp(ThemeMixin, MeldungMixin, KorrekturMixin, EinstellungenMixin,
stuenden beim Ablehnen noch Timer in der Warteschlange, die auf ein
Fenster zugreifen, das es nicht mehr gibt.
"""
self.update_idletasks() # Fenster fertig zeichnen lassen
if not hinweis.angenommen(self.cfg):
print(f"[hinweis] Kenntnisnahme noch offen (Fassung {hinweis.FASSUNG})")
if not self.frage(hinweis.TITEL, hinweis.text("rechnungstool"),