Eigene Kennungen ausblenden, Win95-Menüs, verschiebbares Hauptfenster bei offenem Dialog u. a.
Windows-Build / windows-exe (push) Canceled after 53m28s
Windows-Build / windows-exe (push) Canceled after 53m28s
Neu: - Eigene Kennungen (eigene Filiale) ausblenden: nicht angezeigt, nicht mitgerechnet, nicht exportiert; per Rechtsklick, Händler-Menü oder Import-Bericht; Händler-Zuordnung hat Vorrang - Menüs im Win95-Stil: wechseln beim Überfahren der Menüleiste, Tastatur, Kontextmenü gleich - Dialoge sperren nur den Inhalt: Hauptfenster bleibt verschiebbar/maximierbar; Dialoge haben eigenen Taskleisten-Eintrag; Klick auf gesperrten Inhalt holt den Dialog nach vorn (blinkt) - Trennlinie zwischen Händler- und Positionsliste sichtbar und ziehbar, Position wird gemerkt - Strg+Rücktaste / Strg+Entf löschen ganze Wörter in allen Eingabefeldern Behoben: - Gedrückte Knöpfe zeigten keine Beschriftung (activeForeground gehört in Tk zur Klasse Background) - Tipp des Tages: Text lief aus dem sichtbaren Bereich - Größenänderung: breiterer Griffbereich mit Ecken, Zeiger wird zuverlässig zurückgesetzt, flüssiger; Verschieben über Windows selbst (inkl. Andocken), Minimieren über Windows - Zeichen, die MS Sans Serif nicht hat (…, ▸, →, •), durch Win95-übliche ersetzt - Menü/Tooltip/Dialog: Größe+Position zusammen setzen (Tk ignoriert sonst die Position) - Suche reagiert erst nach kurzer Tipp-Pause (flüssigeres Tippen) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
69c2a108a9
commit
807a38622c
15 files changed
+1217
-187
No files matched your search
+22
-20
@@ -18,7 +18,7 @@ DATEITYPEN = [("Abrechnungen (CSV, Excel)", "*.csv *.xlsx *.xlsm *.xls *.txt"),
|
||||
|
||||
|
||||
def _nummern(text: str) -> list[str]:
|
||||
"""'27518902 (6 Pos.), 27518999' → ['27518902', '27518999']"""
|
||||
"""'27518902 (6 Pos.), 27518999' -> ['27518902', '27518999']"""
|
||||
out = []
|
||||
for teil in text.split(","):
|
||||
m = re.match(r"\s*([A-Za-z0-9]+)", teil)
|
||||
@@ -122,7 +122,7 @@ class Einrichtungsassistent(w.Dialog):
|
||||
if w.frage(self, "Einrichtung abbrechen",
|
||||
"Möchten Sie die Einrichtung wirklich abbrechen?\n\n"
|
||||
"Bereits angelegte Händler bleiben gespeichert. Den Assistenten finden Sie jederzeit "
|
||||
"unter ? ▸ Einrichtungs-Assistent.", default_ja=False):
|
||||
"unter ? > Einrichtungs-Assistent.", default_ja=False):
|
||||
self.result = None
|
||||
self.destroy()
|
||||
|
||||
@@ -133,7 +133,7 @@ class Einrichtungsassistent(w.Dialog):
|
||||
for punkt in ("Speicherort der Daten festlegen",
|
||||
"Unterhändler mit ihren Kennungen anlegen",
|
||||
"die erste Abrechnung anlegen und Dateien importieren"):
|
||||
self._text(f" • {punkt}")
|
||||
self._text(f" - {punkt}")
|
||||
self._text("\nDanach zeigt Ihnen ein kurzer Rundgang, wo Sie was finden.\n\n"
|
||||
"Alle Angaben lassen sich später jederzeit ändern.")
|
||||
self._text("Klicken Sie auf „Weiter“, um fortzufahren.", fg=w.NAVY)
|
||||
@@ -158,7 +158,7 @@ class Einrichtungsassistent(w.Dialog):
|
||||
e = tk.Entry(zeile, textvariable=self.v_db_pfad)
|
||||
e.pack(side="left", fill="x", expand=True)
|
||||
e.bind("<Key>", lambda ev: self.v_db_eigen.set(True))
|
||||
w.knopf(zeile, "Durchsuchen…", self._db_waehlen).pack(side="left", padx=(4, 0))
|
||||
w.knopf(zeile, "Durchsuchen...", self._db_waehlen).pack(side="left", padx=(4, 0))
|
||||
self._text("\nTipp: Auf einem Netzlaufwerk können mehrere PCs dieselben Händler nutzen – "
|
||||
"bitte aber nicht gleichzeitig damit arbeiten.", fg=w.SHADOW)
|
||||
|
||||
@@ -222,7 +222,7 @@ class Einrichtungsassistent(w.Dialog):
|
||||
k = tk.Frame(self.seite, bg=w.FACE)
|
||||
k.pack(fill="x", pady=(4, 4))
|
||||
w.knopf(k, "Händler hinzufügen", self._haendler_dazu, self.app.icons("haendler")).pack(side="left")
|
||||
w.knopf(k, "Nummern aus Abrechnung vorschlagen…", self._vorschlagen).pack(side="left", padx=6)
|
||||
w.knopf(k, "Nummern aus Abrechnung vorschlagen...", self._vorschlagen).pack(side="left", padx=6)
|
||||
|
||||
tk.Label(self.seite, text="Bereits angelegt:", anchor="w").pack(fill="x")
|
||||
lf = tk.Frame(self.seite, bg=w.FACE)
|
||||
@@ -313,7 +313,7 @@ class Einrichtungsassistent(w.Dialog):
|
||||
w.warnung(self, "Nummern vorschlagen", "Nicht lesbar:\n" + "\n".join(fehler))
|
||||
else:
|
||||
w.info(self, "Nummern vorschlagen",
|
||||
"Die gefundenen Nummern stehen jetzt in den Auswahllisten (▼) bei freenet und Vodafone – "
|
||||
"Die gefundenen Nummern stehen jetzt in den Auswahllisten (Pfeil-Knopf rechts) bei freenet und Vodafone – "
|
||||
"sortiert nach Anzahl der Positionen.\n\nDie Nummer mit den meisten Positionen ist meist "
|
||||
"Ihre eigene Filiale.\n\nDie Dateien werden im nächsten Schritt gleich mit importiert.")
|
||||
|
||||
@@ -349,7 +349,7 @@ class Einrichtungsassistent(w.Dialog):
|
||||
self.lb_d.pack(side="left", fill="both", expand=True)
|
||||
kf = tk.Frame(lf, bg=w.FACE)
|
||||
kf.pack(side="left", anchor="n", padx=(6, 0))
|
||||
self._b_dazu = w.knopf(kf, "Hinzufügen…", self._datei_dazu, breite=11)
|
||||
self._b_dazu = w.knopf(kf, "Hinzufügen...", self._datei_dazu, breite=11)
|
||||
self._b_dazu.pack(pady=(0, 4))
|
||||
self._b_weg = w.knopf(kf, "Entfernen", self._datei_weg, breite=11)
|
||||
self._b_weg.pack()
|
||||
@@ -385,12 +385,12 @@ class Einrichtungsassistent(w.Dialog):
|
||||
self._ueberschrift("Fertig!")
|
||||
n = len(self.app.db.haendler_liste())
|
||||
self._text(f"Der {APP_NAME} ist eingerichtet.")
|
||||
self._text(f" • {n} Händler angelegt")
|
||||
self._text(f" - {n} Händler angelegt")
|
||||
if self.v_abrechnung.get():
|
||||
self._text(f" • Abrechnung „{self.v_titel.get().strip()}“"
|
||||
self._text(f" - Abrechnung „{self.v_titel.get().strip()}“"
|
||||
+ (f" mit {len(self.dateien)} Datei(en)" if self.dateien else " (noch ohne Dateien)"))
|
||||
self._text("\nSo geht es danach jeden Monat weiter:\n"
|
||||
" Neu → Import → prüfen & anpassen → Export")
|
||||
" Neu > Import > prüfen & anpassen > Export")
|
||||
tk.Checkbutton(self.seite, text="Kurzen Rundgang durch das Programm starten", variable=self.v_rundgang
|
||||
).pack(anchor="w", pady=(12, 0))
|
||||
self._text("\nKlicken Sie auf „Fertig stellen“.", fg=w.NAVY)
|
||||
@@ -539,21 +539,21 @@ class Rundgang:
|
||||
TIPPS = [
|
||||
"Sie können mehrere Dateien gleichzeitig importieren – zum Beispiel alle freenet-Wochenlisten eines Monats "
|
||||
"und die Vodafone-Datei in einem Rutsch.",
|
||||
"Markieren Sie eine ganze Provisionsart (die graue Zeile) und klicken Sie auf „Prozent…“, um z. B. nur 80 % "
|
||||
"Markieren Sie eine ganze Provisionsart (die graue Zeile) und klicken Sie auf „Prozent...“, um z. B. nur 80 % "
|
||||
"auszuzahlen. Mit dem Häkchen „Als Standard merken“ gilt das automatisch auch in den nächsten Monaten.",
|
||||
"Doppelklick auf eine Position – und Sie können den Auszahlungsbetrag direkt überschreiben. Mit ↓ geht es "
|
||||
"Doppelklick auf eine Position – und Sie können den Auszahlungsbetrag direkt überschreiben. Mit Pfeil runter geht es "
|
||||
"gleich in die nächste Zeile.",
|
||||
"Blau dargestellte Beträge wurden von Hand geändert, rote weichen durch eine Prozent-Regel von der "
|
||||
"Provision ab.",
|
||||
"Eine Position soll gar nicht ausgezahlt werden? Rechtsklick ▸ „Auszahlung 0 €“.",
|
||||
"Die GROSSBUCHSTABEN-Regel hat einen Kunden falsch erwischt? Rechtsklick ▸ „Händler zuweisen…“ – diese "
|
||||
"Eine Position soll gar nicht ausgezahlt werden? Rechtsklick > „Auszahlung 0 €“.",
|
||||
"Die GROSSBUCHSTABEN-Regel hat einen Kunden falsch erwischt? Rechtsklick > „Händler zuweisen...“ – diese "
|
||||
"Zuordnung hat immer Vorrang.",
|
||||
"Unter „(Nicht zugeordnet)“ sehen Sie alles, was keinem Unterhändler gehört – meist Ihre eigene Filiale. "
|
||||
"Diese Positionen werden nicht exportiert.",
|
||||
"Mit Strg+F springen Sie ins Suchfeld. Gesucht wird in Rufnummer, Name, Tarif, Provisionsart und mehr.",
|
||||
"Wurde eine Datei versehentlich doppelt oder falsch importiert? Datei ▸ Importierte Dateien… – dort lässt "
|
||||
"Wurde eine Datei versehentlich doppelt oder falsch importiert? Datei > Importierte Dateien... – dort lässt "
|
||||
"sie sich wieder entfernen.",
|
||||
"Erstellen Sie ab und zu eine Datensicherung: Datei ▸ Datensicherung erstellen…",
|
||||
"Erstellen Sie ab und zu eine Datensicherung: Datei > Datensicherung erstellen...",
|
||||
"Alle Änderungen werden sofort gespeichert. Ein „Speichern“-Knopf ist daher nicht nötig.",
|
||||
"Ein Händler wurde erst nach dem Import angelegt? Kein Problem – die Zuordnung passt sich sofort an.",
|
||||
]
|
||||
@@ -583,13 +583,15 @@ class TippDesTages(w.Dialog):
|
||||
if self._bild is None: # Ersatz, falls das Bild fehlt
|
||||
self._bild = w.make_icon(self, "birne", 3)
|
||||
tk.Label(box, image=self._bild, bg=w.WHITE).pack(side="left", anchor="n", padx=(12, 4), pady=10)
|
||||
rechts = tk.Frame(box, bg=w.WHITE, padx=12, pady=10)
|
||||
# fester Textbereich: der Tipp bricht darin um und kann nicht mehr abgeschnitten werden
|
||||
rechts = tk.Frame(box, bg=w.WHITE, padx=12, pady=10, width=380, height=self._bild.height() + 20)
|
||||
rechts.pack(side="left", fill="both")
|
||||
tk.Label(rechts, text="Wussten Sie schon…", bg=w.WHITE, font=(w.FONT_FAMILY, w.FONT_SIZE + 6, "bold"),
|
||||
rechts.pack_propagate(False)
|
||||
tk.Label(rechts, text="Wussten Sie schon...", bg=w.WHITE, font=(w.FONT_FAMILY, w.FONT_SIZE + 6, "bold"),
|
||||
anchor="w").pack(fill="x")
|
||||
tk.Frame(rechts, bg=w.DARK, height=1).pack(fill="x", pady=6)
|
||||
self.text = tk.Label(rechts, bg=w.WHITE, justify="left", anchor="nw", wraplength=330, width=48, height=8)
|
||||
self.text.pack(fill="both")
|
||||
self.text = tk.Label(rechts, bg=w.WHITE, justify="left", anchor="nw", wraplength=380 - 2 * 12)
|
||||
self.text.pack(fill="both", expand=True)
|
||||
knoepfe = tk.Frame(haupt, bg=w.FACE)
|
||||
knoepfe.pack(side="left", anchor="n", padx=(10, 0))
|
||||
w.knopf(knoepfe, "Schließen", self.abbrechen, breite=12, default="active").pack(pady=(0, 6))
|
||||
|
||||
Reference in new issue
Block a user