Layout: die Formularseite nimmt nur, was sie braucht
Sein Befund
"die namen und datums bloecke koennen schmaler werden sind zu breit und
verdrengen die posten block"
Gemessen stimmte das genau: die sieben Spalten der Leistungstabelle
brauchten 743 Pixel, sichtbar waren 618 - "E.-Preis" und "Gesamt" standen
ausserhalb des Bildes.
Wo die Breite wirklich herkam
An den Feldbreiten zu drehen half NICHTS. Die Arbeitsflaeche verteilte
ueber eine uniform-Gruppe streng im Verhaeltnis 4:3; die Formularspalte war
so breit, weil das Gewicht es vorschrieb, nicht weil der Inhalt es
brauchte - 433 Pixel, ob die Felder nun 38 oder 22 Zeichen breit waren.
Jetzt bekommt die Formularseite eine feste Mindestbreite und kein Gewicht,
die Liste allen uebrigen Platz. Wird das Fenster groesser, waechst allein
die Tabelle - genau dort nuetzt Breite, waehrend ein 600 Pixel breites Feld
fuer eine Postleitzahl nichts besser macht. 433 -> 329.
Dazu passend
- Startbreite 1060 -> 1180 und Mindestbreite 900 -> 1080. Unterhalb von
1080 passen die sieben Spalten selbst dann nicht nebeneinander, wenn die
Textspalte auf ihrer Mindestbreite steht.
- Die Eingabefelder links auf das Mass gekuerzt, das sie wirklich brauchen
(22 statt 38 Zeichen; Datum 12 statt 18). Das senkt die Mindestbreite der
Formularseite - erst dadurch ist sie so klein moeglich.
- "Anreise (TT.MM.JJJJ)" -> "Anreise". Die Form steht jetzt einmal als
graue Zeile unter dem Block. Als Platzhalter IM Feld waere sie
gefaehrlich: ein nicht geloeschter Platzhalter stuende als Anreisedatum
auf der Rechnung.
- Der Textumbruch der Leistungsspalte folgt jetzt ihrer echten Breite. Fest
eingetragen schnitt er den Text ab, sobald die Spalte schmaler wurde.
pruef_spaltenbreiten.py
Prueft ueber die ganze erlaubte Spanne, dass alle Spalten hineinpassen, die
Formularseite lesbar bleibt und NICHT mitwaechst, und der Umbruch zur
Spalte passt. Kein anderer Pruefstand haette das gefunden: es stuerzt
nichts ab und rechnet nichts falsch - man sieht die Preise nur nicht.
Er hat sofort einen zweiten Fehler gefunden: beim Aendern der
Fenstergroesse lief der Umbruch nicht hinterher, weil ich abgebrochen
hatte, sobald sich mein eigener Wert nicht mehr aenderte. Die Spalte kann
aber breiter werden, ohne dass ich etwas aendere. Abbruch jetzt, wenn zwei
Messungen dieselbe Spaltenbreite ergeben.
Fassung 1.7.1.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
This commit is contained in:
parent
8a391b8dfa
commit
42e459ad26
4 changed files with 278 additions and 23 deletions
40
flaeche.py
40
flaeche.py
|
|
@ -42,6 +42,12 @@ STANDARD = {
|
|||
|
||||
|
||||
class Arbeitsflaeche(ttk.Frame):
|
||||
# Wie breit die beiden Spalten mindestens sein muessen. Die Formularseite
|
||||
# ist gemessen, nicht geschaetzt: das breiteste, was dort steht, ist die
|
||||
# Beschriftung "Nachname / Firma *" neben einem 22 Zeichen breiten Feld.
|
||||
MIN_FORMULAR = 330
|
||||
MIN_LISTE = 520
|
||||
|
||||
def __init__(self, master, farben=None, beim_umbauen=None):
|
||||
super().__init__(master)
|
||||
self.f = farben if farben is not None else master
|
||||
|
|
@ -85,23 +91,43 @@ class Arbeitsflaeche(ttk.Frame):
|
|||
def _platz_verteilen(self):
|
||||
"""Der freie Platz gehoert dem Kasten mit der langen Liste.
|
||||
|
||||
Feste Gewichte gehen nicht: die Liste wandert beim Verschieben, und wer
|
||||
das Gewicht an einer festen Zelle laesst, schneidet danach den
|
||||
Kundenkasten unten ab - genau das ist beim ersten Versuch passiert.
|
||||
Feste Gewichte an festen Zellen gehen nicht: die Liste wandert beim
|
||||
Verschieben, und wer das Gewicht an einer festen Zelle laesst,
|
||||
schneidet danach den Kundenkasten unten ab - genau das ist beim ersten
|
||||
Versuch passiert.
|
||||
|
||||
WARUM NICHT MEHR `uniform` (06.09.2026)
|
||||
---------------------------------------
|
||||
Vorher standen beide Spalten in einer uniform-Gruppe mit den Gewichten
|
||||
4 und 3. Das teilt die Breite STRENG in diesem Verhaeltnis auf - bei
|
||||
1040 Pixeln also 594 zu 446, ganz gleich, was in den Kaesten steht.
|
||||
Sein Befund: *"die namen und datums bloecke koennen schmaler werden
|
||||
sind zu breit und verdrengen die posten block"*. Er hatte recht, aber
|
||||
an den Feldbreiten zu drehen half nichts: die Spalte war so breit, weil
|
||||
das Gewicht es vorschrieb, nicht weil der Inhalt es brauchte.
|
||||
|
||||
Jetzt bekommen die Formularkaesten nur, was sie brauchen (feste
|
||||
Mindestbreite, kein Gewicht), und der ganze uebrige Platz geht an die
|
||||
Liste. Wird das Fenster groesser, waechst allein die Tabelle - genau
|
||||
dort nuetzt die Breite, waehrend ein Adressfeld von 600 Pixeln nichts
|
||||
besser macht.
|
||||
"""
|
||||
for z in range(2):
|
||||
self.rowconfigure(z, weight=0, minsize=0)
|
||||
for sp in range(2):
|
||||
self.columnconfigure(sp, weight=1, uniform="spalten")
|
||||
self.columnconfigure(sp, weight=0, uniform="", minsize=0)
|
||||
lang = self.layout.get("leistungen")
|
||||
if not lang:
|
||||
for sp in range(2):
|
||||
self.columnconfigure(sp, weight=1)
|
||||
return
|
||||
spalte, zeile, hoch = lang
|
||||
for z in range(zeile, zeile + hoch):
|
||||
self.rowconfigure(z, weight=1)
|
||||
# Die Spalte mit der Liste bekommt mehr Breite als die andere.
|
||||
self.columnconfigure(spalte, weight=4, uniform="spalten")
|
||||
self.columnconfigure(1 - spalte, weight=3, uniform="spalten")
|
||||
# Die Liste nimmt allen freien Platz ...
|
||||
self.columnconfigure(spalte, weight=1, minsize=self.MIN_LISTE)
|
||||
# ... die Formularseite genau so viel, wie ihr breitestes Feld braucht.
|
||||
self.columnconfigure(1 - spalte, weight=0, minsize=self.MIN_FORMULAR)
|
||||
# Steht die Liste nur in EINER Zeile, braucht die andere trotzdem Luft
|
||||
# fuer ihren Inhalt - sonst wird sie zusammengequetscht.
|
||||
if hoch == 1:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue