commit 64
This commit is contained in:
Binary file not shown.
@@ -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))
|
||||
|
@@ -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.
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user