Absturz beim Ziehen des Fensters behoben, Zeiger am Rand wieder über Tk, Vodafone-Datum in Spalte A
- 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
0880ab2d42
commit
97c73b82c7
11 files changed
+166
-71
No files matched your search
@@ -29,6 +29,9 @@ echo "== Tests inkl. Oberfläche (Windows-Python unter Wine) =="
|
||||
# -v: im Log ist live sichtbar, welcher Test läuft; timeout: Obergrenze für alle Tests zusammen
|
||||
PROVTOOL_GUI_TESTS=1 timeout 900 $PY -m pytest -v -p no:cacheprovider
|
||||
|
||||
echo "== Maustest (echte Maus: Fenster ziehen, Rand ziehen, maximiert ziehen) =="
|
||||
PY="$PY" timeout 300 bash build/maustest.sh
|
||||
|
||||
echo "== Version =="
|
||||
VERSION=$($PY build/version_info.py | tr -d '\r')
|
||||
echo "Version $VERSION"
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
"""Für build/maustest.sh: startet die App und schreibt laufend Lage und Zustand des Hauptfensters.
|
||||
|
||||
Kein pytest-Test – wird im Windows-Build mit echter Maus (xdotool) bedient. Hintergrund: v1.3.0 stürzte
|
||||
beim Ziehen an der Titelleiste hart ab; das sieht man nur mit echter Maus.
|
||||
"""
|
||||
import faulthandler
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import tkinter as tk
|
||||
|
||||
aus = sys.argv[1]
|
||||
faulthandler.enable(open(os.path.join(aus, "absturz.txt"), "w"))
|
||||
home = tempfile.mkdtemp()
|
||||
os.environ["PROVTOOL_HOME"] = home
|
||||
with open(os.path.join(home, "einstellungen.json"), "w") as f:
|
||||
json.dump({"assistent_erledigt": True, "tipps_beim_start": False, "fenster": "900x560+100+100"}, f)
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
from provtool.gui import app as A # noqa: E402
|
||||
|
||||
root = tk.Tk()
|
||||
a = A.App(root)
|
||||
fehler = []
|
||||
root.report_callback_exception = lambda *e: fehler.append(repr(e[1]))
|
||||
|
||||
|
||||
def melden():
|
||||
with open(os.path.join(aus, "status.txt"), "a") as f:
|
||||
f.write(f"{root.winfo_x()} {root.winfo_y()} {root.winfo_width()} {root.winfo_height()} "
|
||||
f"{int(a.rahmen.maximiert)} {len(fehler)}\n")
|
||||
root.after(250, melden)
|
||||
|
||||
|
||||
root.after(250, melden)
|
||||
root.mainloop()
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
# Echte Maus im virtuellen Bildschirm (xdotool): Fenster an der Titelleiste ziehen, am Rand die Größe
|
||||
# ziehen, maximieren und aus „maximiert“ herausziehen. v1.3.0 stürzte dabei hart ab – das sieht nur
|
||||
# ein Test mit echter Maus (Windows-Verschiebeschleife). Aufruf aus build_windows.sh (DISPLAY gesetzt).
|
||||
set -uo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
PY="${PY:-wine python}"
|
||||
AUS="$(mktemp -d)"
|
||||
command -v xdotool >/dev/null || { apt-get update -qq >/dev/null && apt-get install -y -qq xdotool >/dev/null; }
|
||||
command -v xdotool >/dev/null || { echo "xdotool fehlt"; exit 1; }
|
||||
|
||||
$PY build/maus_app.py "$(winepath -w "$AUS" 2>/dev/null || echo "$AUS")" > "$AUS/app.log" 2>&1 &
|
||||
PID=$!
|
||||
for i in $(seq 1 120); do [ -s "$AUS/status.txt" ] && break; sleep 0.5; done
|
||||
sleep 3
|
||||
lage() { tail -1 "$AUS/status.txt" | tr -d '\r'; }
|
||||
lebt() { kill -0 "$PID" 2>/dev/null; }
|
||||
fehler=0
|
||||
pruefe() { # $1 = Schritt
|
||||
sleep 1.5
|
||||
if ! lebt; then echo "ABSTURZ bei: $1"; fehler=1; return 1; fi
|
||||
echo "$1: $(lage)"
|
||||
}
|
||||
ziehen() { # x y dx dy
|
||||
xdotool mousemove "$1" "$2"; sleep 0.4; xdotool mousedown 1; sleep 0.3
|
||||
for i in 1 2 3 4 5 6; do xdotool mousemove_relative -- "$(( $3 / 6 ))" "$(( $4 / 6 ))"; sleep 0.15; done
|
||||
sleep 0.2; xdotool mouseup 1
|
||||
}
|
||||
|
||||
read -r X Y W H M F <<< "$(lage)"
|
||||
echo "Start: $X $Y $W $H maximiert=$M"
|
||||
ziehen $(( X + 300 )) $(( Y + 14 )) 60 42; pruefe "Titelleiste ziehen" || true
|
||||
read -r X2 Y2 W2 H2 M2 F2 <<< "$(lage)"
|
||||
[ "$X2" -ne "$X" ] || [ "$Y2" -ne "$Y" ] || { echo "Fenster hat sich nicht bewegt"; fehler=1; }
|
||||
ziehen $(( X2 + W2 - 2 )) $(( Y2 + H2 / 2 )) 60 0; pruefe "Rand ziehen" || true
|
||||
read -r X3 Y3 W3 H3 M3 F3 <<< "$(lage)"
|
||||
[ "$W3" -gt "$W2" ] || { echo "Größe am Rand nicht geändert ($W2 -> $W3)"; fehler=1; }
|
||||
xdotool mousemove $(( X3 + 300 )) $(( Y3 + 14 )); sleep 0.3
|
||||
xdotool click --repeat 2 --delay 60 1; pruefe "Doppelklick (maximieren)" || true
|
||||
read -r X4 Y4 W4 H4 M4 F4 <<< "$(lage)"
|
||||
[ "$M4" = "1" ] || { echo "nicht maximiert"; fehler=1; }
|
||||
# Unter echtem Windows wird das Fenster dabei wiederhergestellt, unter Wine nicht – hier zählt: kein Absturz
|
||||
ziehen $(( X4 + 400 )) $(( Y4 + 12 )) 0 150; pruefe "aus maximiert herausziehen" || true
|
||||
|
||||
if lebt; then kill "$PID" 2>/dev/null; fi
|
||||
sleep 1
|
||||
if [ -s "$AUS/absturz.txt" ]; then echo "== Absturzprotokoll:"; cat "$AUS/absturz.txt"; fehler=1; fi
|
||||
if grep -q "Fatal Python error" "$AUS/app.log"; then cat "$AUS/app.log"; fehler=1; fi
|
||||
read -r _ _ _ _ _ FE <<< "$(lage)"
|
||||
[ "${FE:-0}" = "0" ] || { echo "Fehler in Tk-Callbacks: $FE"; fehler=1; }
|
||||
[ "$fehler" = 0 ] && echo "Maustest bestanden" || echo "Maustest FEHLGESCHLAGEN"
|
||||
exit "$fehler"
|
||||
Reference in new issue
Block a user