Python Tutorial
- jetzt Python programmieren lernen

Button/Schaltfläche erstellen auf GUI mit Tkinter

Für eine Benutzeraktion bieten sich Buttons an, die wir in unserem Fenster platzieren können und die wir mit Aktionen hinterlegen können.

import tkinter as tk

root = tk.Tk()

# Textausgabe erzeugen
label1 = tk.Label(root, text="Hallo Welt")
label1.pack()

schaltf1 = tk.Button(root, text="Aktion durchführen")
schaltf1.pack()

root.mainloop()

Das erzeugt uns eine Schaltfläche, die zwar noch nichts tut, aber schon einmal angezeigt wird.

Die Schreibweise über 2 Zeilen mit pack() können wir noch kürzer machen, indem wir das Pack an unsere Anweisung tk.Button().pack() „anheften“ (diese Schreibweise klappt bei allen Elementen, so auch bei dem Label für die Textausgabe). Das macht unseren Code schlanker (was zum Lernen suboptimal ist, aber man mal gesehen haben sollte):

import tkinter as tk

root = tk.Tk()
label1 = tk.Label(root, text="Hallo Welt").pack()
schaltf1 = tk.Button(root, text="Aktion durchführen").pack()

root.mainloop()

Auch die Platzierung der Schaltfläche können wir wie beim Label-Widget über side="left|center|right") beeinflussen.

label1 = tk.Label(root, text="Hallo Welt").pack(side="left")

schaltf1 = tk.Button(root, text="Aktion durchführen").pack(side="right")

Button/Schaltfläche mit Aktion verknüpfen

Jetzt belegen wir unsere Schaltfläche mit einer Aktion. Dazu geben wir dem Button-Widget noch das Attribut command=Funktionsaufruf mit:

schaltf1 = tk.Button(root, text="Aktion durchführen", command=aktionSF)
schaltf1.pack()

Zusätzlich benötigen wir noch eine Funktion, die etwas macht. Hier nutzen wir die „Beenden“-Funktion von Tkinter .destroy.

schaltf1 = tk.Button(root, text="Fenster schließen", command=tk.destroy)
schaltf1.pack()

Mit anklicken der Schaltfläche wird also unser Tkinter-Fenster geschlossen. Hier der komplette Code:

import tkinter as tk

root = tk.Tk()

label1 = tk.Label(root, text="Hallo Welt", bg="orange")
label1.pack()

schaltf1 = tk.Button(root, text="Aktion durchführen", command=root.destroy)
schaltf1.pack()

root.mainloop()

Im nächsten Schritt wollen wir eigene Aktionen mit der Schaltfläche „verbinden“.

Eigene Aktionen mit Buttons verbinden

Wir lassen einfach eine Ausgabe im Fenster erfolgen. Das Attribut command erhält nun als Wert den Funktionsnamen übergeben.

import tkinter as tk

def aktionSF():
    label3 = tk.Label(root, text="Aktion durchgeführt", bg="yellow")
    label3.pack()

root = tk.Tk()

label1 = tk.Label(root, text="Hallo Welt", bg="orange")
label1.pack()

schaltf1 = tk.Button(root, text="Aktion durchführen", command=aktionSF)
schaltf1.pack()

root.mainloop()

Jedes Mal, wenn wir nun die Schaltfläche anklicken erweitert sich das Fenster mit der Ausgabe „Aktion durchgeführt“.

Inhalte auslesen und verarbeiten

Hier kommt der Begriff der Steuerelementvariablen ins Spiel. Von Python kennen wir verschiedene Datentypen wie String, Integer, Float und Bool.

Um diese in Tkinter nutzen zu können, müssen die Benennung von Tkinter genutzt werden.

Datentyp Tkinter Datentyp Python-Datentyp
tkinter.StringVar str
tkinter.IntVar int
tkinter.DoubleVar float
tkinter.BooleanVar bool

Wir wollen in unserem kleinen Programm ein Feld mit einer Zahl auslesen und die Gradangabe in Kelvin umrechnen. Mathematisch schön einfach, da wir einfach zu Gradangabe einfach 273 dazurechnen. Dazu müssen wir für unser Feld Entry die Art der Textvariable mitgeben – in folgendem Beispiel ein String über tkinter.StringVar

eingabefeld_wert=tk.StringVar()
eingabefeld=tk.Entry(root, textvariable=eingabefeld_wert)
eingabefeld.pack()

Auf den vom Benutzer eingegebenen Inhalt wollen wir nun zugreifen, wenn der Button angeklickt wird:

schaltf1 = tk.Button(root, text="Aktion durchführen", command=grad_nach_kelvin)
schaltf1.pack()

Und es wir nun die Funktion grad_nach_kelvin aufgerufen.

In der Funktion lassen wir zu Kontrolle einfach den Wert ausgeben. Unser erster Test dazu:

def grad_nach_kelvin():
    print(eingabefeld_wert)

Als Ergebnis erhalten wir nur:

PY_VAR0

Was müssen wir machen, um auf den eigentlichen Inhalt zuzugreifen? Wir müssen diese mit get() auslesen! Nun erhalten wir auch den eingegebenen Inhalt. Aber warum nutzen wir hier Strings und nicht einen numerischen Datentyp? Probieren wir einfach einmal aus, was passiert, wenn wir tk.IntVar() anstelle von tk.StringVar() nutzen.

Solange der Nutzer Ganzzahlen eingibt, ist alles gut. Sobald er versehentlich Text eingibt und der Button geklickt wird, wird Python einen Fehler.

Es ist also gerade einfacher für uns, alle Eingaben zuzulassen und dann die Eingabe zu „casten“ (siehe entsprechendes Kapitel):

Jetzt fehlt uns noch die Umrechnung von Grad Celsius in Kelvin. Hier die Formal dazu:

def grad_nach_kelvin():
    # print(eingabefeld_wert.get())
    grad = int(eingabefeld_wert.get())
    kelvin = grad + 273
    textausgabe = tk.Label(root, text=kelvin, bg="yellow")
    textausgabe.pack()

Und schon haben wir einen Umrechner, den man garantiert jeden Tag benötigt :)

Der komplette Code:

import tkinter as tk

root = tk.Tk()

def grad_nach_kelvin():
    # print(eingabefeld_wert.get())
    grad = int(eingabefeld_wert.get())
    kelvin = grad + 273
    textausgabe = tk.Label(root, text=kelvin, bg="yellow")
    textausgabe.pack()

eingabefeld_wert=tk.StringVar()
eingabefeld=tk.Entry(root, textvariable=eingabefeld_wert)
eingabefeld.pack()

schaltf1 = tk.Button(root, text="Aktion durchführen", command=grad_nach_kelvin)
schaltf1.pack()

root.mainloop()

Aussehen Button verändern

Es gibt weitere Attribute, um das Aussehen der Schaltfläche zu verändern. Hier eine Liste zum selber testen. Ich denke, die jeweilige Möglichkeit ist klar:

highlightthickness="20"
highlightbackground="white", highlightcolor="blue"

Weiterempfehlen • Social Bookmarks • Vielen Dank

Bitte unterstützen Sie dieses Projekt

Sie können dieses Projekt in verschiedenen Formen unterstützen - wir würden uns freuen und es würde uns für weitere Inhalte motivieren :).

Empfehlen Sie es weiter - wir freuen uns immer über Links und Facebook-Empfehlungen.

Das neue E-Book zum Kurs gibt es zum Kaufen.

Sie können uns auch eine Spende über PayPal zukommen lassen.

Bestellen Sie Bücher über folgenden Link bei Amazon:
Bücher über Python

Vielen Dank für Ihre Unterstützung