Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:snippets:bildschirm

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
python:snippets:bildschirm [2025/05/08 17:24] – [heemed Widgets] franzpython:snippets:bildschirm [2025/05/15 15:51] (aktuell) – [Theemed Widgets] franz
Zeile 15: Zeile 15:
 **Rückgabe:** keine\\ **Rückgabe:** keine\\
 **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:
 +
 +<code>
 +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("Hinweis", "Bitte einen Eintrag auswählen.")
 +        # Fokus explizit auf das aktuelle Fenster und die Treeview setzen
 +        self.top.lift()           # Falls du ein Toplevel-Fenster hast, bring es nach vorne
 +        self.top.focus_force()    # Setzt den Fokus auf das Fenster
 +        self.tree.focus_set()     # Setzt den Fokus auf die Treeview
 +        return
 +    data = self.tree.item(selected, "values")
 +    self.open_entry_window(data)
 +
 +</code>
 +==== Create Tooltip ====
 +
 +Möchtre ich einen Tooltip auf ein Widget, Feld oder Button plazieren:
 +
 +<code>
 +def create_tooltip(widget, text):
 +
 +    """
 +
 +    Erstellt einen schwebenden Tooltip für ein Widget, der bei Mouseover angezeigt wird.
 +    Args:
 +        widget (tk.Widget): Das Widget, für das der Tooltip erstellt wird.
 +        text (str): Der anzuzeigende Text im Tooltip.
 +    Returns:
 +        None")
 +    """
 +
 +    tooltip = tk.Toplevel(widget)
 +    tooltip.withdraw()  # Tooltip zunächst unsichtbar machen
 +    tooltip.overrideredirect(True)  # Entfernt Fensterrahmen
 +    tooltip_label = tk.Label(
 +        tooltip,
 +        text=text,
 +        background="lightyellow",
 +        relief="solid",
 +        borderwidth=1,
 +        font=("Arial", 12)
 +    )
 +    tooltip_label.pack()
 +    def show_tooltip(event):
 +        x = widget.winfo_rootx() + event.x + 20
 +        y = widget.winfo_rooty() + event.y
 +        tooltip.geometry(f"+{x}+{y}")
 +        tooltip.deiconify()  # Tooltip anzeigen
 +    def hide_tooltip(event):
 +        tooltip.withdraw()  # Tooltip verstecken
 +    widget.bind("<Enter>", show_tooltip)
 +    widget.bind("<Leave>", hide_tooltip)
 +
 +</code>
 +
 +
 +==== Fenster existiert? ====
 +
 +<code>
 +def ensure_window_exists(db_name, view_windows):
 +    """
 +    Überprüft, ob für die gegebene Datenbank bereits ein Fenster existiert und hebt es hervor.
 +    Args:
 +        db_name (str): Name der Datenbank bzw. der zugehörigen Ansicht.
 +        view_windows (dict): Wörterbuch, das Fensterobjekte anhand ihrer Datenbanknamen speichert.
 +    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
 +
 +</code>
 ==== Fenster zentrieren ==== ==== Fenster zentrieren ====
  
Zeile 49: Zeile 133:
 **Rückgabe:** \\ **Rückgabe:** \\
 None None
 +
  
 ==== Theemed Widgets ==== ==== Theemed Widgets ====
Zeile 54: Zeile 139:
 ''ttk'' bringt einen einheitlichen Ansatz, um über vordefinierte oder eigene „Themes“ das gesamte Look & Feel deiner Anwendung zu steuern. ''ttk'' bringt einen einheitlichen Ansatz, um über vordefinierte oder eigene „Themes“ das gesamte Look & Feel deiner Anwendung zu steuern.
  
-   * +   * Du legst mit ''ttk.Style()''  einen Style-Manager an. 
- +  * Dann definierst du unter einem Style-Namen (''"<Name>.<WidgetType>"'') sämtliche Eigenschaften. 
-Du legst mit ''ttk.Style()''  einen Style-Manager an. +  * Alle Widgets dieses Typs, die du mit genau diesem Style-Namen erzeugst, übernehmen die Einstellungen automatisch.
- +
-  * +
- +
-Dann definierst du unter einem Style-Namen (''"<Name>.<WidgetType>"'') sämtliche Eigenschaften. +
- +
-  * +
- +
-Alle Widgets dieses Typs, die du mit genau diesem Style-Namen erzeugst, übernehmen die Einstellungen automatisch.+
  
 <code> <code>
 +from tkinter import ttk
 style = ttk.Style() style = ttk.Style()
 # Basis-Theme auswählen (z. B. 'clam', 'alt', 'default', 'classic') # Basis-Theme auswählen (z. B. 'clam', 'alt', 'default', 'classic')
 style.theme_use('clam') style.theme_use('clam')
 +
 +# Dann benutzt du ttk.Button mit diesem Style
 +close_button = ttk.Button(
 +    root,
 +    text="Schließen",
 +    command=root.destroy,
 +    style='My.TButton'
 +)
 +close_button.pack(side=tk.LEFT, padx=5, pady=10)
  
 </code> </code>
 +
 +**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.1746717859.txt.gz · Zuletzt geändert: von franz

Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki