Absturz beim Ziehen des Fensters behoben, Zeiger am Rand wieder über Tk, Vodafone-Datum in Spalte A
Windows-Build / windows-exe (push) Successful in 5m30s
Windows-Build / windows-exe (push) Successful in 5m30s
- Verschieben/Größe ziehen per PostMessage statt SendMessage: Die Windows-Verschiebeschleife lief innerhalb eines Tk-Ereignisses; Tk führte darin Python-Ereignisse (<Configure>) aus -> harter Absturz „PyEval_RestoreThread … thread state is NULL“ (normal und aus maximiert). - Größen-Mauszeiger am Rand wieder von Tk (blieb sonst im Fenster stehen); Windows zieht beim Drücken. - Neuer Maustest im Build (xdotool, echte Maus): Titelleiste/Rand ziehen, maximieren, herausziehen. - Export: Bei Vodafone steht in Spalte A das Aktivierungsdatum (statt Abrechnungslauf). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
966379293a
commit
5a9d6d19a2
11 files changed
+166
-71
No files matched your search
+20
-14
@@ -836,13 +836,8 @@ def test_rand_zeiger_wird_zurueckgesetzt(lauf_mit_daten):
|
||||
lauf.ablauf([]) # erst wenn das Hauptfenster zu sehen ist (Größen stimmen dann)
|
||||
ev = type("E", (), {"x": 2, "y": lauf.root.winfo_height() // 2})()
|
||||
r._rand_cursor(ev)
|
||||
if r.nativ_an:
|
||||
# Windows: den Zeiger setzt Windows selbst (WM_SETCURSOR am äußeren Fenster, siehe
|
||||
# test_windows_echtes_fenster_andocken_und_rand) – Tk darf keinen eigenen setzen, der hängen bleibt.
|
||||
assert r.aussen.cget("cursor") == "", "Tk-Zeiger trotz nativem Rahmen gesetzt"
|
||||
assert r._welcher_rand(2, 10) == "nw" and r._welcher_rand(r.aussen.winfo_width() - 3, 10) == "ne"
|
||||
lauf.pruefen()
|
||||
return
|
||||
# Den Zeiger verwaltet immer Tk – auch mit nativem Windows-Rahmen (gemeldet in 1.3.0: setzte
|
||||
# Windows ihn am Rand, blieb er im Fenster der Größenpfeil, weil Tk davon nichts wusste).
|
||||
assert r.aussen.cget("cursor"), "am Rand muss der Größenänderungs-Zeiger erscheinen"
|
||||
r.inhalt.event_generate("<Enter>")
|
||||
lauf.root.update()
|
||||
@@ -923,11 +918,6 @@ def test_windows_echtes_fenster_andocken_und_rand(lauf_mit_daten):
|
||||
m["ecke"] = n.trefferpruefung(n.hwnd, x + bw - 3, y + bh - 3) == nativ.HT["se"]
|
||||
m["ecke_lang"] = n.trefferpruefung(n.hwnd, x + bw - 3, y + 10) == nativ.HT["ne"]
|
||||
m["innen"] = n.trefferpruefung(n.hwnd, x + bw // 2, y + bh // 2) == nativ.HTCLIENT
|
||||
m["rand_durchlaessig"] = n.trefferpruefung(r.aussen.winfo_id(), x + 2, my) == nativ.HTTRANSPARENT
|
||||
m["innen_nicht"] = n.trefferpruefung(r.aussen.winfo_id(), x + bw // 2, y + 3 + 30) != nativ.HTTRANSPARENT
|
||||
# die Maus landet am Rand wirklich beim äußeren Fenster (durch Tk-Fenster hindurch)
|
||||
m["maus_am_rand"] = n.fenster_bei(x + 2, my) == n.hwnd
|
||||
m["maus_innen"] = n.fenster_bei(x + bw // 2, y + bh // 2) != n.hwnd
|
||||
|
||||
# Tk darf das Fenster bei internen Größenanfragen nicht um einen Rahmen vergrößern
|
||||
n.setzen(x, y, bw - 37, bh - 23) # wie Größe ziehen durch den Benutzer
|
||||
@@ -960,8 +950,7 @@ def test_windows_echtes_fenster_andocken_und_rand(lauf_mit_daten):
|
||||
assert all(m["stil"].values()), f"Fensterstil unvollständig: {m['stil']}"
|
||||
assert m["programmfenster"], "Fenster ist für Windows noch ein Werkzeugfenster (kein Andocken/Win+Pfeil)"
|
||||
assert m["rahmen_unsichtbar"] and m["tk_gleich_aussen"], "Windows-Rahmen ist sichtbar / Tk-Größe passt nicht"
|
||||
for k in ("links", "ecke", "ecke_lang", "innen", "rand_durchlaessig", "innen_nicht", "maus_am_rand",
|
||||
"maus_innen"):
|
||||
for k in ("links", "ecke", "ecke_lang", "innen"):
|
||||
assert m[k], f"Trefferprüfung am Rand falsch: {k} ({m})"
|
||||
assert m["waechst_nicht"][0] == m["waechst_nicht"][1], f"Fenster ist gewachsen: {m['waechst_nicht']}"
|
||||
assert m["max"] == (True, True), f"Maximieren über Windows nicht erkannt: {m['max']}"
|
||||
@@ -1046,3 +1035,20 @@ def test_export_dialog_standard_eine_datei_ohne_null(lauf_mit_daten, tmp_path):
|
||||
zeilen = [r for r in openpyxl.load_workbook(dateien[0]).active.iter_rows(values_only=True) if r[1]]
|
||||
assert [r[1] for r in zeilen] == ["Sonderbonus Aktion"], "0-€-Position wurde exportiert"
|
||||
lauf.pruefen()
|
||||
|
||||
|
||||
def test_rand_druecken_startet_natives_ziehen(lauf_mit_daten, monkeypatch):
|
||||
"""Mit nativem Rahmen zieht Windows die Größe – angestoßen beim Drücken auf den Rand."""
|
||||
lauf = lauf_mit_daten
|
||||
r = lauf.app.rahmen
|
||||
if not r.nativ_an:
|
||||
pytest.skip("nur mit nativem Windows-Rahmen")
|
||||
lauf.ablauf([])
|
||||
gezogen = []
|
||||
monkeypatch.setattr(r.nativ, "groesse_ziehen", gezogen.append)
|
||||
ev = type("E", (), {"x": 2, "y": lauf.root.winfo_height() // 2, "x_root": 0, "y_root": 0})()
|
||||
assert r._resize_start(ev) == "break"
|
||||
ev.x, ev.y = r.aussen.winfo_width() - 2, r.aussen.winfo_height() - 2
|
||||
r._resize_start(ev)
|
||||
assert gezogen == ["w", "se"]
|
||||
lauf.pruefen()
|
||||
+9
-1
@@ -165,8 +165,16 @@ def test_zuordnung_regeln_und_export(db, freenet_csv, vodafone_xlsx, tmp_path):
|
||||
# Standard: freenet UND Vodafone in einer Datei (gemeldet: Vodafone fehlte im Export)
|
||||
eine = export.exportiere_haendler(tmp_path / "out1", "Händler A", eigene, "Oktober 2026")
|
||||
assert [d.name for d in eine] == ["Händler A - Oktober 2026.xlsx"]
|
||||
arten = [r[1] for r in openpyxl.load_workbook(eine[0]).active.iter_rows(values_only=True) if r[1]]
|
||||
zeilen1 = [r for r in openpyxl.load_workbook(eine[0]).active.iter_rows(values_only=True) if r[1]]
|
||||
arten = [r[1] for r in zeilen1]
|
||||
assert "Freischaltungsvergütung Vodafone" in arten and "SIM-Karten" in arten
|
||||
# Spalte A: Vodafone mit Aktivierungsdatum, freenet mit Zeitraum
|
||||
vf = next(r for r in zeilen1 if r[1] == "Freischaltungsvergütung Vodafone")
|
||||
assert vf[0] == datetime(2026, 9, 8)
|
||||
assert next(r for r in zeilen1 if r[1] == "SIM-Karten")[0] == "2026.10.01-2026.10.07"
|
||||
ws1 = openpyxl.load_workbook(eine[0]).active
|
||||
zeile_vf = next(c.row for c in ws1["B"] if c.value == "Freischaltungsvergütung Vodafone")
|
||||
assert ws1.cell(zeile_vf, 1).number_format == "DD.MM.YYYY"
|
||||
ws = openpyxl.load_workbook(dateien[0]).active
|
||||
zeilen = [[c.value for c in r] for r in ws.iter_rows(min_row=1, max_row=4)]
|
||||
# Sortierung Zeitraum → Provisionsart → Datum
|
||||
|
||||
Reference in new issue
Block a user