From 4cf46e993232780390590b3602ebb397f9b76ae8 Mon Sep 17 00:00:00 2001 From: TheMockTv Date: Sat, 5 Sep 2026 18:25:54 +0200 Subject: [PATCH] Pruefstand-Fenster gehen neben dem Bildschirm auf, ohne Maus zu greifen Sein Fund mitten im Lauf: "pack doch die maus nicht immer auf das programm, weil ich kann dir sonst nichts schreiben". Im Testlauf oeffnen Fenster und Dialoge jetzt bei x = Bildschirmbreite + 20 - auf dem zweiten Monitor, wenn einer da ist -, und kein Dialog ruft mehr grab_set. Unsichtbar machen (withdraw) waere falsch: dann sieht niemand mehr, was der Pruefstand tut - und ein weggenommenes Fenster baut seine Dialoge nicht mehr richtig auf. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax --- app.py | 7 +++++++ theme.py | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/app.py b/app.py index cf23915..f135492 100644 --- a/app.py +++ b/app.py @@ -60,6 +60,13 @@ class RechnungsApp(ThemeMixin, KorrekturMixin, EinstellungenMixin, tk.Tk): hoehe = max(560, min(840, self.winfo_screenheight() - 90)) self.geometry(f"1060x{hoehe}") self.minsize(900, 540) + if TESTLAUF: + # Ein Pruefstand bedient das Programm, waehrend nebenan jemand + # arbeitet. Das Fenster geht deshalb NEBEN dem Bildschirm auf (auf + # dem zweiten Monitor, wenn einer da ist) - sichtbar, aber nicht im + # Weg. Unsichtbar machen waere falsch: dann sieht niemand mehr, was + # der Pruefstand eigentlich tut. + self.geometry(f"+{self.winfo_screenwidth() + 20}+40") self.anzahl_vars = {} # nr -> StringVar self.personen_vars = {} # nr -> StringVar diff --git a/theme.py b/theme.py index 3070c3e..dd06109 100644 --- a/theme.py +++ b/theme.py @@ -122,6 +122,12 @@ class ThemeMixin: und Tastatur fest, waehrend nebenan jemand schreibt. """ d.configure(bg=self.col_bg) + if config.TESTLAUF: + # Wie das Hauptfenster: neben den Bildschirm, und ohne grab_set - + # ein Dialog, der Maus und Tastatur festhaelt, blockiert den + # Menschen, der nebenher schreibt. + d.geometry(f"+{d.winfo_screenwidth() + 20}+40") + d.grab_set = lambda *a, **k: None # erst nach dem Anzeigen setzen, sonst greift DWM noch nicht d.after(20, lambda: self._dark_titlebar(d))