commit 64

This commit is contained in:
2025-08-07 11:37:03 +02:00
parent e059efc1cf
commit b1bd928a76
4 changed files with 2 additions and 85 deletions

View File

@@ -434,7 +434,7 @@ class WidgetManager:
self.search_status_label.grid(row=0, column=1, sticky="w", pady=(5,0), padx=(5,0))
self.right_container.grid_rowconfigure(0, weight=1)
self.settings_button.grid(in_=self.right_container, row=0, column=0, sticky="se")
self.settings_button.grid(in_=self.right_container, row=0, column=0, sticky="ne")
def _layout_open_buttons_right(self):
self.right_container.grid_rowconfigure(0, weight=1)
@@ -443,7 +443,6 @@ class WidgetManager:
self.settings_button.grid(in_=self.right_container, row=0, column=1, sticky="ne", padx=(5,0))
self.left_container.grid_rowconfigure(0, weight=1)
self.trash_button.grid(in_=self.left_container, row=0, column=0, sticky="sw")
self.center_container.grid_columnconfigure(1, weight=1)
self.filter_combobox.grid(in_=self.center_container, row=1, column=1, sticky="e", pady=(5,0))

View File

@@ -1,82 +0,0 @@
# 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:
```python
# 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 das `search_entry`).
- Im **Save-Modus**: Das `filename_entry`.
Diese werden direkt in den `center_container` gepackt und füllen dessen Breite aus.
- **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` (im `left_container`)
- `row2_center` (im `center_container`)
- `row2_right` (im `right_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 des `center_container`.
- **Wenn `button_box_pos == 'left'` (Buttons Links):**
- `left_container`: Enthält `open_button` und `cancel_button`.
- `center_container`: Enthält `filter_combobox` und `search_status_label`.
- `right_container`: Enthält den `settings_button`.
- **Wenn `button_box_pos == 'right'` (Buttons Rechts):**
- `left_container`: Ist leer.
- `center_container`: Enthält `search_status_label` (linksbündig darin) und `filter_combobox` (rechtsbündig darin).
- `right_container`: Enthält `open_button`, `cancel_button` und `settings_button`.
---
#### **Im `Save-Modus`**
- **`filename_entry`**: Immer in der oberen Zeile des `center_container`.
- **Wenn `button_box_pos == 'left'` (Buttons Links):**
- `left_container`: Enthält `save_button`, `cancel_button` und den `trash_button`.
- `center_container`: Enthält `filter_combobox` und `search_status_label`.
- `right_container`: Enthält den `settings_button`.
- **Wenn `button_box_pos == 'right'` (Buttons Rechts):**
- `left_container`: Enthält nur den `trash_button`.
- `center_container`: Enthält `search_status_label` (linksbündig) und `filter_combobox` (rechtsbündig).
- `right_container`: Enthält `save_button`, `cancel_button` und `settings_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.

View File

@@ -33,7 +33,7 @@ class GlotzMol(tk.Tk):
dialog = CustomFileDialog(self,
initial_dir=os.path.expanduser("~"),
filetypes=[("All Files", "*.*")
], dialog_mode="save")
])
# This is the crucial part: wait for the dialog to be closed
self.wait_window(dialog)