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

View file

@ -473,6 +473,13 @@ class MeldungMixin:
x = self.winfo_rootx() + max(0, (self.winfo_width() - d.winfo_reqwidth()) // 2)
y = self.winfo_rooty() + 140
d.geometry(f"+{max(0, x)}+{max(0, y)}")
# Nach vorn holen und den Tastaturfokus nehmen. Ohne das kann der Dialog
# beim Start hinter dem Hauptfenster liegen - der Nutzer sieht nur ein
# Fenster, das nicht reagiert, und haelt es fuer haengen geblieben.
d.lift()
d.attributes("-topmost", True)
d.after(100, lambda: d.attributes("-topmost", False))
d.focus_force()
d.grab_set()
d.focus_set()
self.wait_window(d)