Win95-Titelleiste und -Menüleiste, Einrichtungs-Assistent, Rundgang, Tipp des Tages
- selbst gezeichneter Fensterrahmen (verschieben, maximieren, minimieren, Größe ändern), abschaltbar - Dialoge mit Win95-Titelleiste; vorherige Modalsperre wird nach Rückfragen wiederhergestellt - Assistent: Speicherort, Unterhändler (Nummern aus Abrechnung vorschlagen), erste Abrechnung - Rundgang mit Hinweis-Sprechblasen, Tipp des Tages Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a837ddc4d4
commit
4cfe0e6c47
7 files changed
+1128
-43
No files matched your search
+47
-1
@@ -218,6 +218,23 @@ ICONS = {
|
||||
...kkwwwwwwkk...
|
||||
.....kkkkkkk....
|
||||
................""",
|
||||
"birne": """
|
||||
.....kkkkk......
|
||||
....kyyyyyk.....
|
||||
...kyywwyyyk....
|
||||
..kyywwyyyyyk...
|
||||
..kywwyyyyyyk...
|
||||
..kyyyyyyyyyk...
|
||||
..kyyyyyyyyyk...
|
||||
...kyyyyyyyk....
|
||||
....kyyyyyk.....
|
||||
.....kyyyk......
|
||||
.....kdddk......
|
||||
.....kgggk......
|
||||
.....kdddk......
|
||||
.....kgggk......
|
||||
......kkk.......
|
||||
................""",
|
||||
"app": """
|
||||
................
|
||||
.....kkkkkkk....
|
||||
@@ -480,6 +497,10 @@ def auto_breite(tree: ttk.Treeview, flex: dict[str, float], reserve: int = 4):
|
||||
|
||||
# --------------------------------------------------------------------------- Dialoge
|
||||
|
||||
# Klassischer Win95-Rahmen auch für Dialoge (wird von der App gesetzt, abschaltbar in den Einstellungen)
|
||||
KLASSISCH = False
|
||||
|
||||
|
||||
class Dialog(tk.Toplevel):
|
||||
"""Modaler Dialog im Win95-Stil."""
|
||||
|
||||
@@ -496,6 +517,13 @@ class Dialog(tk.Toplevel):
|
||||
self.iconphoto(False, master.winfo_toplevel()._app_icon) # type: ignore[attr-defined]
|
||||
except Exception:
|
||||
pass
|
||||
self.titelleiste = None
|
||||
if KLASSISCH:
|
||||
from provtool.gui.rahmen import Titelleiste
|
||||
self.overrideredirect(True)
|
||||
self.configure(bd=2, relief="raised", padx=2, pady=2)
|
||||
self.titelleiste = Titelleiste(self, self, titel, None, ("close",), schliessen=self.abbrechen)
|
||||
self.titelleiste.pack(side="top", fill="x")
|
||||
|
||||
def zeigen(self, fokus=None):
|
||||
self.update_idletasks()
|
||||
@@ -503,15 +531,33 @@ class Dialog(tk.Toplevel):
|
||||
w, h = self.winfo_reqwidth(), self.winfo_reqheight()
|
||||
x = m.winfo_rootx() + max(0, (m.winfo_width() - w) // 2)
|
||||
y = m.winfo_rooty() + max(0, (m.winfo_height() - h) // 3)
|
||||
self.geometry(f"+{x}+{y}")
|
||||
self.geometry(f"+{max(0, x)}+{max(0, y)}")
|
||||
self.deiconify()
|
||||
self.lift()
|
||||
vorher = self.grab_current() # z. B. der Assistent, wenn hier eine Rückfrage aufgeht
|
||||
try:
|
||||
self.grab_set()
|
||||
except tk.TclError:
|
||||
pass
|
||||
bind_id = None
|
||||
if KLASSISCH:
|
||||
# Ein rahmenloser Dialog darf nicht hinter dem Hauptfenster verschwinden
|
||||
bind_id = m.bind("<FocusIn>", lambda e: self.winfo_exists() and self.lift(), add="+")
|
||||
self.focus_force()
|
||||
(fokus or self).focus_set()
|
||||
self.wait_window()
|
||||
if bind_id:
|
||||
try:
|
||||
m.unbind("<FocusIn>", bind_id)
|
||||
except tk.TclError:
|
||||
pass
|
||||
# Tk gibt beim Schließen die Sperre frei, stellt die vorige aber nicht wieder her
|
||||
try:
|
||||
if vorher is not None and vorher.winfo_exists():
|
||||
vorher.grab_set()
|
||||
vorher.focus_force()
|
||||
except tk.TclError:
|
||||
pass
|
||||
return self.result
|
||||
|
||||
def abbrechen(self):
|
||||
|
||||
Reference in new issue
Block a user