Tkinter

Tkinter


Eine einfache Benutzeroberfläche mit Tkinter
Basisdaten

EntwicklerJohn Ousterhout
Aktuelle Version8.6.13
BetriebssystemPlattformunabhängig
Programmier­sprachePython
KategorieGUI-Toolkit
LizenzBSD-Lizenz
wiki.python.org/moin/TkInter

Tkinter ist eine Sprachanbindung für das GUI-Toolkit Tk für die Programmiersprache Python. Der Name steht als Abkürzung für Tk interface. Tkinter war das erste GUI-Toolkit für Python, weshalb es inzwischen auf Mac OS und Windows auch zum Lieferumfang von Python gehört.

Funktionsumfang

Durch Tkinter ist es mit Python möglich, Programme mit einer grafischen Benutzeroberfläche zu erstellen. Diese Programme und GUIs können unter Windows, Mac OS und unter allen gängigen Linux-Distributionen genutzt werden.

Inzwischen gibt es mehrere Alternativen, zu denen unter anderem WxPython, PyQt und PySide, PyGTK, Kivy sowie PyFLTK zählen.

Hallo Welt

Die Bildschirmausgabe des Beispielprogramms unter Windows 11

Ein einfaches Hallo-Welt-Programm in Python 3.9 mit Tkinter:

#Example (Hello, World):
import tkinter #in python 3.x: tkinter wird kleingeschrieben

tk = tkinter.Tk()
frame = tkinter.Frame(tk, relief="ridge", borderwidth=2)
frame.pack(fill="both", expand=1)
label = tkinter.Label(frame, text="Hallo Welt!")
label.pack(expand=1)
button = tkinter.Button(frame, text="OK", command=tk.destroy)
button.pack(side="bottom")

tk.mainloop()

Bedienelemente und Layout-Manager

Tkinter ermöglicht es, verschiedene Bedienelemente im Fenster einzubinden. Dazu zählen z. B. Schaltflächen (Buttons), Schieberegler und Labels. Diese können durch drei unterschiedliche Methoden mithilfe der Layout-Manager in das Fenster integriert werden, zum einen mit dem .pack()-Befehl, dem .grid()-Befehl und zum anderen mit dem .place()-Befehl.[1]

Grid-Manager

Der Grid-Manager ermöglicht es, Bedienelemente in einer Art Tabelle in das Fenster zu integrieren, das heißt, er basiert im Wesentlichen auf einer Tabelle, die in Reihen und Spalten angeordnet ist. Zur Anordnung werden 'row' und 'column' angegeben, d. h. Zeile und Spalte.

Beispiel für eine Anordnung mithilfe des Grid-Managers:

from tkinter import *
fenster = Tk()
fenster.title("Wikipedia")
fenster.geometry("200x50")
label = Label(fenster, text = "Hallo Welt!")
label.grid(row = 1, column = 1) #Anordnung durch Grid-Manager
fenster.mainloop()

Pack-Manager

Der Pack-Manager ist (für den Entwickler) der einfachste Layout-Manager, den Python mitliefert. Statt dem Programm genaue Angaben darüber zu geben, wo man das jeweilige Bedienelement platzieren möchte, muss man lediglich den .pack()-Befehl nutzen. Python ordnet das Element anschließend von alleine an und bindet es in das Programm ein.

Beispiel für eine Anordnung mithilfe des Pack-Managers:

from tkinter import *
fenster = Tk()
fenster.title("Wikipedia")
fenster.geometry("200x50")
label = Label(fenster, text = "Hallo Welt!")
label.pack() #Anordnung durch Pack-Manager
fenster.mainloop()
Geometriesystem des Place-Managers. Hier dargestellt in einem Tkinter-Fenster.

Place-Manager

Der Place Manager hingegen erlaubt eine sehr präzise Angabe der Position. Dabei werden Angaben über die x- und die y-Position der Bedienelemente gemacht. Zu beachten ist hierbei, dass die positive y-Richtung nach unten geht.

Beispiel für Anordnung mithilfe des Place-Managers:

from tkinter import *
fenster = Tk()
fenster.title("Wikipedia")
fenster.geometry("200x50")
label = Label(fenster, text = "Hallo Welt!")
label.place(x = 10, y = 10) #Anordnung durch Place-Manager
fenster.mainloop()

Widgets

Label-Widget

Das Label-Widget wird verwendet, um Text im Fenster anzuzeigen.

Lable-Widget Beispiel
from tkinter import *

fenster = Tk() #Fenster erstellen

label1 = Label(fenster, text = "Dies ist der angezeigte Text!")
label1.place(x = 10, y = 10)

fenster.mainloop()

Hierbei hat das Label-Widget viele Attribute:

AttributBeschreibungBeispiel
text

textvarible

Der Text, der im Label angezeigt wird.text="Hello, World!"

textvariable=tk_text_var

bgDie Hintergrundfarbe des Labels.bg="blue"
fgDie Vordergrundfarbe des Texts im Label.fg="white"
fontDie Schriftart und Größe des Texts im Label.font=("Helvetica", 16)
widthDie Breite des Labels in Zeichen oder Pixel.width=20
heightDie Höhe des Labels in Zeilen oder Pixel.height=2
wraplengthDie maximale Breite des Textumbruchs in Pixel.wraplength=200
anchorDie Ausrichtung des Texts innerhalb des Labels.anchor="w"
justifyDie Ausrichtung des Texts im Label.justify="left"
reliefDer Rahmenstil des Labels.relief="solid"
bdDie Breite des Rahmens um das Label.bd=2
padx, padyDer zusätzliche horizontale und vertikale Abstand um den Text im Label.padx=10, pady=5
imageEin Bild, das im Label angezeigt werden soll.image=my_image
compoundBestimmt, wie Text und Bild im Label angeordnet werden soll.compound="left"
bitmapEin Bitmap-Name, der im Label angezeigt werden soll.bitmap="info"
underlineDie Position des unterstrichenen Buchstabens im Text.text="Underline", underline=0
cursorDer Cursor, der angezeigt wird, wenn die Maus über das Label bewegt wird.cursor="hand2"
stateDer Status des Labels: normal, disabled oder active.state="disabled"

Button-Widget

Das Button-Widget wird verwendet, um einen Knopf zu erstellen und diesen verwenden zu können.

Button-Widget Beispiel
import tkinter as tk

fenster = tk.Tk()

button1 = tk.Button(fenster, text="Schließen", command=fenster.destroy)
button1.place(x=10,y=10)

fenster.mainloop()

Hierbei hat das Button-Widget viele Attribute:

AttributBeschreibungBeispiel
textDer Text, der im Widget angezeigt werden soll.text="Schließen"
fontDie Schriftart des Textes.font=("Helvetica", 12)
bgDie Hintergrundfarbe des Widgets.bg="blue"
fgDie Vordergrundfarbe (Textfarbe) des Widgets.fg="white"
widthDie Breite des Widgets in Zeichen.width=20
heightDie Höhe des Widgets in Zeilen.height=2
reliefDer Relief-Stil des Widgets (z. B. "flat", "raised", "sunken", "ridge", "groove").relief="raised"
justifyDie Ausrichtung des Textes im Widget ("left", "right", "center").justify="center"
anchorDie Position des Textes innerhalb des Widgets ("n", "s", "e", "w", "center").anchor="center"
padxDer Abstand des Textes zum linken und rechten Rand des Widgets.padx=10
padyDer Abstand des Textes zum oberen und unteren Rand des Widgets.pady=5
imageEin Bild, das anstelle von Text im Widget angezeigt werden soll.image=my_image
commandEine Funktion, die ausgeführt wird, wenn das Widget angeklickt wird (nur Button-Widget).command=button_clicked

Entry-Widget

Das Entry-Widget ist ein Eingabefeld, in dem der Nutzer Eintragungen vornehmen kann.

Entry-Widget Beispiel
from tkinter import *

fenster = Tk()

entry1 = Entry(fenster, text="Nummer")
entry1.place(x=10,y=10)

fenster.mainloop()

Hierbei hat das Entry-Widget viele Attribute:

AttributBeschreibungBeispiel
fontDie Schriftart und -größe des Textes im Entry.font=("Helvetica", 12)
bgDie Hintergrundfarbe des Entry.bg="lightgray"
fgDie Textfarbe des Entry.fg="black"
widthDie Breite des Entry in Zeichen.width=20
reliefDer Relief-Stil des Entry.relief="sunken"
justifyDie Ausrichtung des Textes im Entry.justify="center"

Text-Widget

Das Text-Widget ist ein großes Eingabefeld.

Text-Widget Beispiel mit Benutzereingabe
from tkinter import *

fenster = Tk()

text1 = Text(fenster)
text1.place(x=10,y=10)

fenster.mainloop()

Hierbei hat das Text-Widget viele Attribute:

AttributBeschreibungBeispiel
fontDie Schriftart und -größe des Textes im Text-Widget.font=("Helvetica", 12)
bgDie Hintergrundfarbe des Text-Widgets.bg="white"
fgDie Textfarbe des Text-Widgets.fg="black"
reliefDer Relief-Stil des Text-Widgets.relief="sunken"
widthDie Breite des Text-Widgets in Zeichen.width=40
heightDie Höhe des Text-Widgets in Zeilen.height=10
wrapDer Umbruchmodus des Textes ("none", "char", "word").wrap="word"
padxDer Abstand des Textes zum linken und rechten Rand des Widgets.padx=5
padyDer Abstand des Textes zum oberen und unteren Rand des Widgets.pady=5
selectbackgroundDie Hintergrundfarbe des ausgewählten Textes im Text-Widget.selectbackground="blue"
selectforegroundDie Textfarbe des ausgewählten Textes im Text-Widget.selectforeground="white"
insertbackgroundDie Farbe des Cursors im Text-Widget.insertbackground="red"
insertwidthDie Breite des Cursors im Text-Widget.insertwidth=2
insertofftimeDie Zeit in Millisekunden, die der Cursor im Text-Widget sichtbar bleibt, wenn er blinkt.insertofftime=300
stateDer Zustand des Text-Widgets ("normal", "disabled").state="normal"
undoEin boolescher Wert, der angibt, ob das Rückgängig-Feature aktiviert ist.undo=True
maxundoDie maximale Anzahl von Schritten, die im Rückgängig-Verlauf gespeichert werden sollen.maxundo=100
autoseparatorsEin boolescher Wert, der angibt, ob automatisch Trennzeichen zwischen Textblöcken eingefügt werden sollen.autoseparators=True
inactiveselectbackgroundDie Hintergrundfarbe des ausgewählten Textes im Text-Widget, wenn es inaktiv ist.inactiveselectbackground="lightgray"
inactiveselectforegroundDie Textfarbe des ausgewählten Textes im Text-Widget, wenn es inaktiv ist.inactiveselectforeground="black"
exportselectionEin boolescher Wert, der angibt, ob der ausgewählte Text des Text-Widgets auch außerhalb des Widgets verfügbar ist.exportselection=True
insertborderwidthDie Breite des Rahmens um den Cursor im Text-Widget.insertborderwidth=1
insertontimeDie Zeit in Millisekunden, die der Cursor im Text-Widget sichtbar bleibt, bevor er blinkt.insertontime=600
commandEine Funktion, die ausgeführt wird, wenn der Inhalt des Text-Widgets geändert wird.command=text_changed

Themed Tk (ttk)

Das Modul "Themed Tk" (kurz: ttk) ist ein Modul in Tkinter, welches eine Sammlung von moderner aussehenden Widgets mit erweiterter Funktionalität beinhaltet. Außerdem besitzt ttk mehr Widgets.

Hello World Programm

Bildschirmausgabe des Beispielprogramms

Dies ist ein einfaches Hallo-Welt-Programm mit ttk:

import tkinter
from tkinter import ttk

app = tkinter.Tk() #Fenster erstellen
app.title("Hello")

ttk_label = ttk.Label(app, text="Hello WORLD", font=("Arial", 16, "bold"))
ttk_label.place(x=10, y=10)

ttk_button = ttk.Button(app, text="Click me!")
ttk_button.place(x=20,y=30)

app.mainloop()

Der Unterschied zu normalem Tkinter in diesem Programm ist, dass das Drücken des Knopfes eine andere Animation auslöst.

Widgets

Ttk besitzt folgende Widgets:

WidgetBeschreibung
ttk.ButtonEin Button-Widget mit modernem Look.
ttk.LabelEin Label-Widget mit modernem Look.
ttk.EntryEin Eingabefeld für die Texteingabe mit modernem Look.
ttk.ComboboxEin Kombinationsfeld (Dropdown-Menü) mit modernem Look.
ttk.TreeviewEin Widget zur Anzeige hierarchischer Daten, ähnlich einer Baumstruktur.
ttk.NotebookEin Tab-Widget zur Darstellung von Registerkarten.
ttk.ProgressbarEin Fortschrittsbalken zur Anzeige des Fortschritts eines Prozesses.
ttk.CheckbuttonEin Kontrollkästchen mit modernem Look.
ttk.RadiobuttonEin Optionsbutton mit modernem Look.
ttk.ScaleEin Schieberegler mit modernem Look.
ttk.SeparatorEin Trennlinien-Widget mit modernem Look.

Siehe auch

Commons: Tkinter – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

  1. GUI-Programmierung mit Python: Layout-Manager und Layout-Management in Tkinter. Abgerufen am 20. Februar 2017.