Zum Inhalt springen

Python/ Tkinter/ Grundlagen

Aus Wikibooks

Wenn Sie ihre Programme nicht nur auf der Kommandozeile sondern auch mit einer grafischen Benutzeroberfläche nutzen wollen können Sie aus einer Vielzahl an Bibliotheken auswählen. Das Modul Tkinter hat den Vorteil, dass es standardmäßig zusammen mit Python installiert wird (auf Windows und MacOS). Nachteile sind das etwas altbackene Aussehen und die unzureichende Unterstützung für Webinhalte.

Ein einfaches Fenster

[Bearbeiten]
import tkinter as tk  # damit wir tkinter nicht immer ausschreiben müssen, setzen wir tk als Alias

"""
Hauptfenster
"""
root = tk.Tk()
root.title("Mein Beispielprogramm")  # Fenstertitel

"""
Schleife - läuft permanent um das Fenster darzustellen und auf den Nutzer zu reagieren.
"""
root.mainloop()
einfaches Fenster

Damit können wir ein einfaches Fenster darstellen. Anfangen können wir damit noch nichts, außer es mit einem Klick auf "x" zu schließen oder die Größe mit der Maus zu ändern (um den Titel komplett anzuzeigen)

Größe und Position

[Bearbeiten]

Python zeichnet das Fenster nur genauso groß, wie nötig. Im Normalfall wollen wir aber, dass das Fenster eine gewisse Mindestgröße aufweist. Dies erreichen wir durch die Anwendung des Parameters .geometry auf das Hauptfenster:

import tkinter as tk  # damit wir tkinter nicht immer ausschreiben müssen, setzen wir tk als Alias

"""
Hauptfenster
"""
root = tk.Tk()
root.title("Mein Beispielprogramm")  # Fenstertitel
root.geometry("800x600")  # Mindestgröße des Fensters, Breite * Höhe (in Pixel)

"""
Schleife - läuft permanent um das Fenster darzustellen und auf den Nutzer zu reagieren.
"""
root.mainloop()
Das Fenster hat jetzt eine Mindestgröße - und viel leere Fläche

Damit ist zumindest der Titel gut zu lesen!

Menüs

[Bearbeiten]

Damit wir unser Fenster um eine Menüleiste ergänzen können, müssen wir den Code um mehrere Zeilen erweitern:

import tkinter as tk  # damit wir tkinter nicht immer ausschreiben müssen, setzen wir tk als Alias

"""
Hauptfenster
"""
root = tk.Tk()
root.title("Mein Beispielprogramm")  # Fenstertitel
# root.attributes("-fullscreen", True)
root.geometry("400x200")  # Mindestgröße des Fensters, Höhe * Breite (in Pixel)

"""
Menü
"""
menue_zeile = tk.Menu(root)  # wir erstellen ein neues Menü ...
root.config(menu=menue_zeile)  # ... und hängen es an das Hauptfenster an

"""
Menü - Spalte "Datei"
"""
datei_menue = tk.Menu(menue_zeile, tearoff=0)  # tearoff = ablösbar
menue_zeile.add_cascade(label="Datei", menu=datei_menue)
datei_menue.add_command(label="Ende", command=root.destroy)

"""
Schleife - läuft permanent um das Fenster darzustellen und auf den Nutzer zu reagieren.
"""
root.mainloop()
Unser erstes Menü!

In Zeilen 14 und 15 legen wir grundsätzlich ein Menü fest und "hängen" es an das Hauptfenster an. Danach müssen wir das Menü noch mit Einträgen füllen, da sonst nichts zu sehen ist. Jede einzelne "Spalte"/jedes einzelnes Drop-down-Menü muss einzeln definiert werden. In Zeile 20 legen wir das klassische "Datei-Menü" fest und geben ihm in Zeile 21 den entsprechenden Namen. Dies müssen Sie für jede Menüspalte wiederholen, bspw. um ein Hilfemenü zu ergänzen:

# ...
"""
Menü - Spalte "Hilfe"
"""
hilfe_menue = tk.Menu(menue_zeile, tearoff=0)
menue_zeile.add_cascade(label="Hilfe", menu=hilfe_menue)
# ...

Die Reihenfolge der Einträge richtet sich dabei nach der Reihenfolge der Erstellung im Skript: platzieren Sie den Code für das Hilfemenü vor demjenigen für das Dateimenü, ist die Reihenfolge im Programm entsprechend "Hilfe Datei".

Mit der Eigenschaft tearoff können wir festlegen, ob der Nutzer das Menü "abreissen" darf. D.h. er klickt auf eine gestrichelte Linie am Anfang der Spalte und hat das Menü dann in einem eigenen, kleinen Fenster.

In Zeile 22 legen wir einen Menüeintrag fest und weisen ihn einer Menüspalte zu. Interessant wird es mit dem Parameter command. Dieser legt fest, welche Aktion ausgeführt wird wenn der Nutzer auf ihn klickt. Im Beispiel ist es root.dextroy, d.h. wir zerstören das Hauptfenster und beenden damit das Programm.