4.2 KiB
Beschreibung der Layout-Struktur (Unterer Bereich)
Selbstverständlich. Sie haben absolut recht, eine gute Dokumentation ist wichtig, besonders nach einer solchen Umstrukturierung. Ich werde die neue Logik des unteren Bereichs detailliert aufschlüsseln.
Das Grundkonzept: Drei flexible Spalten
Stellen Sie sich den gesamten unteren Bereich (action_status_frame) wie eine Tabelle mit einer Zeile und drei Spalten vor:
left_container |
center_container (flexibel) |
right_container |
|---|---|---|
| (linksbündig) | (füllt den Platz) | (rechtsbündig) |
action_status_frame: Dies ist der Haupt-Frame für den gesamten unteren Bereich. Er enthält die drei Container.left_container: Alle Widgets, die linksbündig sein sollen, kommen hier hinein.right_container: Alle Widgets, die rechtsbündig sein sollen, kommen hier hinein.center_container: Dieser Container ist der flexible Teil. Er dehnt sich aus, um den gesamten verfügbaren Platz zwischen dem linken und rechten Container zu füllen. Hier platzieren wir die Statusleiste oder das Eingabefeld für den Dateinamen.
Gesteuert wird dieses Verhalten durch diese Zeilen:
# Die drei Container werden im Haupt-Frame platziert
left_container.grid(row=0, column=0, sticky='w')
center_container.grid(row=0, column=1, sticky='ew')
right_container.grid(row=0, column=2, sticky='e')
# Dem Grid wird gesagt, dass nur die mittlere Spalte (1) wachsen soll
self.action_status_frame.grid_columnconfigure(1, weight=1)
Die zwei "Zeilen": Widgets in den Containern
Innerhalb dieser drei Spalten-Container organisieren wir die Widgets in zwei logischen Zeilen.
-
Obere Zeile: Dies ist meist ein einzelnes, breites Widget.
- Im Open-Modus: Die
status_bar(oder dassearch_entry). - Im Save-Modus: Das
filename_entry. Diese werden direkt in dencenter_containergepackt und füllen dessen Breite aus.
- Im Open-Modus: Die
-
Untere Zeile: Hier liegen die meisten Aktions-Widgets (Buttons, Combobox). Um die horizontale Anordnung innerhalb der drei Spalten beizubehalten, wird für diese Zeile in jeden Haupt-Container ein weiterer kleiner Frame gepackt:
row2_left(imleft_container)row2_center(imcenter_container)row2_right(imright_container)
Platzierung der Widgets: Wer kommt wohin?
Jetzt wird nur noch entschieden, welches Widget in welchen Container kommt.
Im Open-Modus
-
status_bar/search_entry: Immer in der oberen Zeile descenter_container. -
Wenn
button_box_pos == 'left'(Buttons Links):left_container: Enthältopen_buttonundcancel_button.center_container: Enthältfilter_comboboxundsearch_status_label.right_container: Enthält densettings_button.
-
Wenn
button_box_pos == 'right'(Buttons Rechts):left_container: Ist leer.center_container: Enthältsearch_status_label(linksbündig darin) undfilter_combobox(rechtsbündig darin).right_container: Enthältopen_button,cancel_buttonundsettings_button.
Im Save-Modus
-
filename_entry: Immer in der oberen Zeile descenter_container. -
Wenn
button_box_pos == 'left'(Buttons Links):left_container: Enthältsave_button,cancel_buttonund dentrash_button.center_container: Enthältfilter_comboboxundsearch_status_label.right_container: Enthält densettings_button.
-
Wenn
button_box_pos == 'right'(Buttons Rechts):left_container: Enthält nur dentrash_button.center_container: Enthältsearch_status_label(linksbündig) undfilter_combobox(rechtsbündig).right_container: Enthältsave_button,cancel_buttonundsettings_button.
Der entscheidende Vorteil ist: Wenn Sie jetzt ein Widget verschieben oder hinzufügen wollen, müssen Sie nur noch entscheiden, in welchen der drei Haupt-Container (left, center, right) und in welche "Zeile" (direkt oder in den row2-Frame) es gehört. Das komplexe Jonglieren mit Spalten- und Zeilenindizes im Grid entfällt vollständig.
Ich hoffe, diese Erklärung macht die neue Struktur klarer und die Wartung für Sie einfacher.