python:snippets:bildschirm
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| python:snippets:bildschirm [2025/05/07 11:58] – ↷ Seite von python:snippets nach python:snippets:bildschirm verschoben und umbenannt franz | python:snippets:bildschirm [2025/05/15 15:51] (aktuell) – [Theemed Widgets] franz | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== | + | ====== |
| - | + | ||
| - | ===== Bildschirmsteuerungen | + | |
| ==== auf voriges Fenster zurückspringen ==== | ==== auf voriges Fenster zurückspringen ==== | ||
| Zeile 17: | Zeile 15: | ||
| **Rückgabe: | **Rückgabe: | ||
| **Beachte: ** bei Funktionen, die an sich kein Fenster haben, das übergeordnete Fenster im Aufruf der Funktion zu übergeben. | **Beachte: ** bei Funktionen, die an sich kein Fenster haben, das übergeordnete Fenster im Aufruf der Funktion zu übergeben. | ||
| + | |||
| + | Habe ich das Fenster akuell nicht zur Verfügung, funktioniert das so: | ||
| + | |||
| + | < | ||
| + | def edit_entry(self) -> None: | ||
| + | """ | ||
| + | Öffnet ein Bearbeitungsfenster für den ausgewählten Depotbestand. | ||
| + | Zeigt Warnung, wenn kein Eintrag ausgewählt ist. | ||
| + | """ | ||
| + | selected = self.tree.focus() | ||
| + | if not selected: | ||
| + | messagebox.showwarning(" | ||
| + | # Fokus explizit auf das aktuelle Fenster und die Treeview setzen | ||
| + | self.top.lift() | ||
| + | self.top.focus_force() | ||
| + | self.tree.focus_set() | ||
| + | return | ||
| + | data = self.tree.item(selected, | ||
| + | self.open_entry_window(data) | ||
| + | |||
| + | </ | ||
| + | ==== Create Tooltip ==== | ||
| + | |||
| + | Möchtre ich einen Tooltip auf ein Widget, Feld oder Button plazieren: | ||
| + | |||
| + | < | ||
| + | def create_tooltip(widget, | ||
| + | |||
| + | """ | ||
| + | |||
| + | Erstellt einen schwebenden Tooltip für ein Widget, der bei Mouseover angezeigt wird. | ||
| + | Args: | ||
| + | widget (tk.Widget): | ||
| + | text (str): Der anzuzeigende Text im Tooltip. | ||
| + | Returns: | ||
| + | None") | ||
| + | """ | ||
| + | |||
| + | tooltip = tk.Toplevel(widget) | ||
| + | tooltip.withdraw() | ||
| + | tooltip.overrideredirect(True) | ||
| + | tooltip_label = tk.Label( | ||
| + | tooltip, | ||
| + | text=text, | ||
| + | background=" | ||
| + | relief=" | ||
| + | borderwidth=1, | ||
| + | font=(" | ||
| + | ) | ||
| + | tooltip_label.pack() | ||
| + | def show_tooltip(event): | ||
| + | x = widget.winfo_rootx() + event.x + 20 | ||
| + | y = widget.winfo_rooty() + event.y | ||
| + | tooltip.geometry(f" | ||
| + | tooltip.deiconify() | ||
| + | def hide_tooltip(event): | ||
| + | tooltip.withdraw() | ||
| + | widget.bind("< | ||
| + | widget.bind("< | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Fenster existiert? ==== | ||
| + | |||
| + | < | ||
| + | def ensure_window_exists(db_name, | ||
| + | """ | ||
| + | Überprüft, | ||
| + | Args: | ||
| + | db_name (str): Name der Datenbank bzw. der zugehörigen Ansicht. | ||
| + | view_windows (dict): Wörterbuch, | ||
| + | Returns: | ||
| + | bool: True, falls ein entsprechendes Fenster existiert und sichtbar ist, sonst False. | ||
| + | |||
| + | """ | ||
| + | |||
| + | if db_name in view_windows and view_windows[db_name].winfo_exists(): | ||
| + | view_windows[db_name].lift() | ||
| + | view_windows[db_name].focus_force() | ||
| + | return True | ||
| + | return False | ||
| + | |||
| + | </ | ||
| ==== Fenster zentrieren ==== | ==== Fenster zentrieren ==== | ||
| Zeile 51: | Zeile 133: | ||
| **Rückgabe: | **Rückgabe: | ||
| None | None | ||
| + | |||
| + | |||
| + | ==== Theemed Widgets ==== | ||
| + | |||
| + | '' | ||
| + | |||
| + | * Du legst mit '' | ||
| + | * Dann definierst du unter einem Style-Namen (''"< | ||
| + | * Alle Widgets dieses Typs, die du mit genau diesem Style-Namen erzeugst, übernehmen die Einstellungen automatisch. | ||
| + | |||
| + | < | ||
| + | from tkinter import ttk | ||
| + | style = ttk.Style() | ||
| + | # Basis-Theme auswählen (z. B. ' | ||
| + | style.theme_use(' | ||
| + | |||
| + | # Dann benutzt du ttk.Button mit diesem Style | ||
| + | close_button = ttk.Button( | ||
| + | root, | ||
| + | text=" | ||
| + | command=root.destroy, | ||
| + | style=' | ||
| + | ) | ||
| + | close_button.pack(side=tk.LEFT, | ||
| + | |||
| + | </ | ||
| + | |||
| + | **Vorteile von ttk.style** | ||
| + | |||
| + | * Zentrales Styling für viele Widgets auf einmal | ||
| + | * Einheitliche Themes (z. B. helle und dunkle Varianten) | ||
| + | * Plattform-nahes Aussehen (Buttons wie auf Windows, macOS, …) | ||
python/snippets/bildschirm.1746611918.txt.gz · Zuletzt geändert: von franz