Modernes Design (Standard, Win95 als Legacy), Zeitraum abrechnen, Abrechnung erledigt, Linux-Build
- Design: „modern“ (hell, flach, wie Windows 11, normaler Windows-Rahmen) ist Standard; „win95“ bleibt unter Datei > Einstellungen wählbar (Einstellung „design“). - Export: Zeitraum von–bis (nach Aktivierungsdatum oder Abrechnungszeitraum des Anbieters), exportierte Positionen werden als abgerechnet gekennzeichnet (Betrag/Händler eingefroren) und per Fingerabdruck auch in späteren Dateien/Abrechnungen nicht noch einmal abgerechnet. - Datei > Abrechnung erledigt / wieder öffnen: erledigte Abrechnungen sind gegen Änderungen gesperrt. - DB-Schema v4 (Migration inkl. Fingerabdrücke für alte Positionen). - Linux-Build (python:3.12-bookworm) als zweiter Pipeline-Job mit Tests und Selbsttest; Release-Upload für beide Jobs über build/release_hochladen.sh. - Behoben: normaler Windows-Rahmen stürzte beim Start ab (Hauptrahmen.nativ fehlte). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
97c73b82c7
commit
851fd6600a
17 files changed
+829
-80
No files matched your search
+14
-8
@@ -51,25 +51,28 @@ class Popup:
|
||||
self.leiste = leiste
|
||||
root = self.master._root()
|
||||
f = self.fenster = tk.Toplevel(root, bg=w.FACE, bd=2, relief="raised")
|
||||
if w.MODERN:
|
||||
f.configure(bg=w.WHITE, bd=0, relief="flat", highlightthickness=1, highlightbackground=w.RAND)
|
||||
f.withdraw()
|
||||
f.overrideredirect(True)
|
||||
self.zeilen = []
|
||||
grund, py = (w.WHITE, 4) if w.MODERN else (w.FACE, 2)
|
||||
for e in self.eintraege:
|
||||
if e["art"] == "trenner":
|
||||
t = tk.Frame(f, bg=w.FACE, height=8)
|
||||
t = tk.Frame(f, bg=grund, height=8)
|
||||
t.pack(fill="x")
|
||||
linie = w.trenner(t, vertikal=False)
|
||||
linie.place(relx=0, rely=0.5, relwidth=1, y=-1)
|
||||
continue
|
||||
zeile = tk.Frame(f, bg=w.FACE)
|
||||
zeile = tk.Frame(f, bg=grund)
|
||||
zeile.pack(fill="x")
|
||||
grau = e["state"] == "disabled"
|
||||
text = tk.Label(zeile, text=e["label"], bg=w.FACE, anchor="w", padx=18, pady=2,
|
||||
text = tk.Label(zeile, text=e["label"], bg=grund, anchor="w", padx=18, pady=py,
|
||||
fg=w.SHADOW if grau else w.DARK)
|
||||
text.pack(side="left", fill="x", expand=True)
|
||||
labels = [text]
|
||||
if e["accelerator"]:
|
||||
acc = tk.Label(zeile, text=e["accelerator"], bg=w.FACE, anchor="e", padx=12, pady=2,
|
||||
acc = tk.Label(zeile, text=e["accelerator"], bg=grund, anchor="e", padx=12, pady=py,
|
||||
fg=w.SHADOW if grau else w.DARK)
|
||||
acc.pack(side="right")
|
||||
labels.append(acc)
|
||||
@@ -170,8 +173,8 @@ class Popup:
|
||||
self.aktiv = i
|
||||
for j, (e, zeile, labels) in enumerate(self.zeilen):
|
||||
an = j == i and e.get("state") != "disabled"
|
||||
bg = w.NAVY if an else w.FACE
|
||||
fg = w.WHITE if an else (w.SHADOW if e.get("state") == "disabled" else w.DARK)
|
||||
bg = w.SEL_BG if an else (w.WHITE if w.MODERN else w.FACE)
|
||||
fg = w.SEL_FG if an else (w.SHADOW if e.get("state") == "disabled" else w.DARK)
|
||||
zeile.configure(bg=bg)
|
||||
for lbl in labels:
|
||||
lbl.configure(bg=bg, fg=fg)
|
||||
@@ -248,7 +251,7 @@ class Menueleiste(tk.Frame):
|
||||
def _darstellen(self):
|
||||
for k in self.knoepfe.values():
|
||||
if k is self.offener_knopf:
|
||||
k.configure(bg=w.NAVY, fg=w.WHITE, relief="flat")
|
||||
k.configure(bg=w.SEL_BG, fg=w.SEL_FG, relief="flat")
|
||||
else:
|
||||
k.configure(bg=w.FACE, fg=w.DARK, relief="flat")
|
||||
|
||||
@@ -289,7 +292,10 @@ class Menueleiste(tk.Frame):
|
||||
|
||||
def _hover(self, knopf, drin: bool):
|
||||
if self.offener_knopf is None:
|
||||
knopf.configure(relief="raised" if drin else "flat")
|
||||
if w.MODERN:
|
||||
knopf.configure(bg=w.LIGHT if drin else w.FACE)
|
||||
else:
|
||||
knopf.configure(relief="raised" if drin else "flat")
|
||||
|
||||
def _alt(self, knopf):
|
||||
self.oeffnen(knopf)
|
||||
|
||||
Reference in new issue
Block a user