Popups gehen mittig ueber dem Programmfenster auf

Seine Ansage
  "da gehen noch die popups auf dem video monitor auf"
  "einfach so programmieren das die popup auf dem fenster mittig vom main
   fenster auf gehen"

Was falsch war
  An sechs Stellen stand `max(0, x)`. Das sollte verhindern, dass ein Dialog
  ausserhalb des Bildschirms aufgeht - klemmt aber jede NEGATIVE Koordinate
  auf null. Bei ihm steht der zweite Monitor links (x = -1920): jedes Popup
  sprang damit zurueck auf den Hauptbildschirm, obwohl das Programm nebenan
  lief. Dazu kamen feste Versaetze wie "+120+140", die mit der Fenstergroesse
  nichts zu tun hatten.

theme.mittig(dialog, ueber)
  Eine Stelle fuer alle Dialoge: mittig ueber dem Elternfenster, etwas
  oberhalb der Mitte (ein Drittel statt der Haelfte), damit der Blick dort
  ist und die Mitte des Formulars frei bleibt.

  Das ist zugleich die Antwort auf die Monitorfrage: steht das Programm auf
  dem zweiten Bildschirm, geht der Dialog dort auf - ohne dass irgendwo ein
  Monitor gesucht werden muss. Die Sonderbehandlung im Testlauf konnte
  deshalb entfallen; geblieben ist dort nur der Verzicht auf grab_set.

theme.auf_bildschirm(x, y, breite, hoehe)
  Begrenzt eine Position auf den GESAMTEN Desktop ueber alle Monitore
  (SM_*VIRTUALSCREEN) statt auf den Hauptmonitor. Das war die eigentliche
  Absicht hinter dem alten max(0, ...).

Gemessen statt geglaubt: Dialogmitte und Fenstermitte liegen 8 Pixel
auseinander (Fensterrahmen), der Dialog liegt innerhalb des Fensters. Steht
als Pruefung in pruef_darstellung.py.

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-07 00:52:58 +02:00
parent adbb035cf1
commit 688dfb53c4
7 changed files with 106 additions and 15 deletions

6
app.py
View file

@ -574,7 +574,7 @@ class RechnungsApp(ThemeMixin, MeldungMixin, KorrekturMixin, EinstellungenMixin,
ttk.Separator(rahmen, orient="horizontal").pack(fill="x", pady=(12, 10))
ttk.Button(rahmen, text="Schließen", width=14,
command=d.destroy).pack(anchor="e")
d.geometry(f"+{self.winfo_rootx() + 120}+{self.winfo_rooty() + 140}")
theme.mittig(d, self)
return d
def _umbruch_nachziehen(self, runde=0, vorige_breite=None):
@ -1078,7 +1078,7 @@ class RechnungsApp(ThemeMixin, MeldungMixin, KorrekturMixin, EinstellungenMixin,
d.bind("<Escape>", lambda _e: d.destroy())
d.update_idletasks()
x = self.winfo_rootx() + max(0, (self.winfo_width() - d.winfo_reqwidth()) // 2)
d.geometry(f"+{max(0, x)}+{self.winfo_rooty() + 110}")
theme.mittig(d, self)
d.grab_set()
self.wait_window(d)
if fertig["ok"]:
@ -1428,7 +1428,7 @@ class RechnungsApp(ThemeMixin, MeldungMixin, KorrekturMixin, EinstellungenMixin,
d.bind("<Escape>", lambda _e: d.destroy())
d.update_idletasks()
x = self.winfo_rootx() + max(0, (self.winfo_width() - d.winfo_reqwidth()) // 2)
d.geometry(f"+{max(0, x)}+{self.winfo_rooty() + 130}")
theme.mittig(d, self)
d.grab_set()
self.wait_window(d)
return wahl["art"]