Tkinter-Widgets

Im ersten Artikel zu Tkinter wurde ein schlichtes Fenster erstellt, das „Hello, World!“ anzeigt; der Code sah so aus:

#!/usr/bin/env python3

import tkinter as tk

root = tk.Tk()
root.title("Ein Hello-World-Programm")

root.geometry("400x200")

tk.Label(root,
        text="Hello, World!",
        background="green",
        foreground="white",
        font=("TkDefaultFont", 18)).pack(side="left")

root.mainloop()

Das Ergebnis war folgendes Fenster:

Tkinter Label Widget
Tkinter-Window mit einem Label Widget (Linux)

In diesem Artikel geht es nun um Widgets. Bei Widgets handelt es sich um typische GUI-Elemente wie beispielsweise Buttons, Labels oder ein Eingabefeld (entry). Im obigen Code wird bereits ein Widget verwendet: tk.Label(). Beginnen wir das nachfolgende Beispiel mit diesem Widget.

Label

#! /usr/bin/env python3

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Widgets")
root.geometry("400x200")

label = ttk.Label(root, text="Hello, World!")
label.pack()  # <- nicht vergessen

root.mainloop()

Zum ersten Beispiel gibt es einen Unterschied. Es werden die Widgets aus dem Modul ttk verwendet. Daher wurde eine zusätzliche Import-Anweisung hinzugefügt:

from tkinter import ttk

Dies ist nicht zwingend, jedoch sind die Widgets aus diesem Modul moderner.

Mit der Zeile

label = ttk.Label(root, text="Hello, World!")

oder

label = ttk.Label(master=root, text="Hello, World!")

wird das Widget erstellt. Dabei werden zwei Parameter angegeben. Zum einen die Information, zu welchem Element das Label-Widget hinzugefügt werden soll. Hier ist dies das root-Fenster (Die Bezeichnung ist übrigens frei wählbar. Denkbar wäre zum Beispiel auch die Bezeichnung window.) Zum anderen der anzuzeigende Text.

Die darauf folgende Zeile ist zwingend erforderlich. Andernfalls würde das Label nicht angezeigt werden:

label.pack()

Eingabefeld (Entry)

Zum Label-Widget soll nun ein Eingabefeld hinzugefügt werden. Dafür steht ttk.Entry() zur Verfügung. Der Code sieht folgendermaßen aus:

entry = ttk.Entry(master=root)
entry.pack()

Auch hier könnte master= weggelassen werden:

entry = ttk.Entry(root)
entry.pack()

Unser Fenster enthält somit nun zwei Widgets:

Tkinter Label and Entry Widget
Tkinter-Window mit zwei Widgets (macOS)

Button

Als drittes Widget soll noch ein Button dazukommen. Der Code ähnelt sehr dem Code zum Erstellen eines Labels:

button = ttk.Button(master=root, text="Click me")
button.pack()

Das Fenster sieht jetzt wie folgt aus:

Tkinter Label, Entry and Button Widget
Tkinter-Window mit drei Widgets (Windows 11)

Der Button kann angeklickt werden, allerdings verbirgt sich dahinter keine Funktionalität. Dies wird das Thema eines späteren Artikels zu Tkinter sein.

Vollständiger Code

Zum Schluss noch der vollständige Code:

#! /usr/bin/env python3

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Widgets")
root.geometry("400x200")

label = ttk.Label(master=root, text="Hello, World!")
label.pack()

entry = ttk.Entry(master=root)
entry.pack()

button = ttk.Button(master=root, text="Click me")
button.pack()

root.mainloop()