Zwei echte Fehler aus der Pruefkette behoben
## 1. Der Darstellungsdialog zerstoerte sich beim ersten Klick selbst
_oberflaeche_neu() loeschte ALLE Kinder des Hauptfensters - und ein
tk.Toplevel IST ein Kind. Der offene Dialog wurde also mitgeloescht, die
Zeile danach fasste eine Leiche an:
_tkinter.TclError: invalid command name ".!toplevel"
Die Farbe wechselte zwar und nichts ging verloren, aber das Fenster
verschwand beim ersten Klick, jede weitere Umstellung brauchte einen neuen
Menueaufruf, und jedes Mal landete ein Traceback im Log. In BEIDEN
Programmen.
Behoben: fremde Toplevels bleiben stehen. Damit ueberlebt auch ein offener
Ordnerwahl- oder Einstellungsdialog den Wechsel.
⚠️ Warum mein Pruefstand es nicht fand: er setzte cfg["darstellung"] von Hand
und rief _oberflaeche_neu() direkt - also alles ausser dem Weg, den ein
Mensch geht. Den Dialog oeffnete er zwar, mass aber nur dessen Position.
pruef_darstellung drueckt jetzt den Radioknopf (.invoke()) und prueft, dass
der Dialog danach noch lebt UND dass ein ZWEITER Klick im selben Dialog
wirkt - das war vorher unmoeglich.
## 2. Unerreichbarer Code nach einem return
_fenstersymbol() hatte zwei Zeilen der alten Inline-Fassung hinter dem
return stehen. Rest meines symbol_setzen-Umbaus; per AST ueber alle Dateien
beider Ordner belegt (genau ein Treffer).
Beides gefunden von der Pruefkette nach R23. Die Aufraeumbefunde derselben
Runde (doppelter Code, tote Variablen, 34x dasselbe pruefe()) kommen
getrennt - eine Fehlerbehebung soll fuer sich pruefbar bleiben.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
This commit is contained in:
parent
08426b3d9b
commit
5babfc3e2e
2 changed files with 72 additions and 3 deletions
15
app.py
15
app.py
|
|
@ -512,8 +512,19 @@ class RechnungsApp(ThemeMixin, MeldungMixin, KorrekturMixin, EinstellungenMixin,
|
|||
except Exception: # noqa: BLE001 - dann eben das erste Blatt
|
||||
pass
|
||||
|
||||
# Fremde Fenster stehen lassen! Ein tk.Toplevel IST ein Kind des
|
||||
# Hauptfensters - der offene Darstellungsdialog wurde hier bisher
|
||||
# mitgeloescht, und die Zeile danach fasste eine Leiche an
|
||||
# ("invalid command name .!toplevel"). Gefunden am 07.09.2026 von der
|
||||
# Pruefkette, mit dem echten Bedienweg gemessen: Klick auf "Dunkel"
|
||||
# -> Farbe wechselt, Fenster ist weg, Traceback im Log.
|
||||
#
|
||||
# Der Pruefstand hat es nicht gefunden, weil er cfg["darstellung"] von
|
||||
# Hand setzte und _oberflaeche_neu() direkt rief - also alles ausser
|
||||
# dem Weg, den ein Mensch geht.
|
||||
for kind in self.winfo_children():
|
||||
kind.destroy()
|
||||
if not isinstance(kind, tk.Toplevel):
|
||||
kind.destroy()
|
||||
self.flaeche = None
|
||||
self._text_zellen = []
|
||||
|
||||
|
|
@ -846,8 +857,6 @@ class RechnungsApp(ThemeMixin, MeldungMixin, KorrekturMixin, EinstellungenMixin,
|
|||
def _fenstersymbol(self):
|
||||
"""Das Programmsymbol auf das Fenster legen."""
|
||||
return wasserzeichen.symbol_setzen(self, dunkel=getattr(self, "_dark_mode", False))
|
||||
print("[symbol] assets/programm.ico nicht gefunden")
|
||||
return False
|
||||
|
||||
def _hinweis_wenn_sichtbar(self, versuche=0):
|
||||
"""Wartet, bis das Fenster gezeichnet ist, und fragt dann.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue