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.
Tkinter | |
---|---|
Eine einfache Benutzeroberfläche mit Tkinter | |
Basisdaten | |
Entwickler | John Ousterhout |
Aktuelle Version | 8.6 |
Betriebssystem | Plattformunabhängig |
Programmiersprache | Python |
Kategorie | GUI-Toolkit |
Lizenz | BSD-Lizenz |
wiki.python.org/moin/TkInter |
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
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()
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.
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:
Attribut | Beschreibung | Beispiel |
---|---|---|
text
|
Der Text, der im Label angezeigt wird. | Label(root, text="Hello, World!") |
bg |
Die Hintergrundfarbe des Labels. | Label(root, bg="blue") |
fg |
Die Vordergrundfarbe des Texts im Label. | Label(root, fg="white") |
font |
Die Schriftart und Größe des Texts im Label. | Label(root, font=("Helvetica", 16)) |
width |
Die Breite des Labels in Zeichen oder Pixeln. | Label(root, width=20) |
height |
Die Höhe des Labels in Zeilen oder Pixeln. | Label(root, height=2) |
wraplength |
Die maximale Breite des Textumbruchs in Pixeln. | Label(root, wraplength=200) |
anchor |
Die Ausrichtung des Texts innerhalb des Labels. | Label(root, anchor="w") |
justify |
Die Ausrichtung des Texts im Label. | Label(root, justify="left") |
relief |
Der Rahmenstil des Labels. | Label(root, relief="solid") |
bd |
Die Breite des Rahmens um das Label. | Label(root, bd=2) |
padx , pady |
Der zusätzliche horizontalen und vertikalen Abstand um den Text im Label. | Label(root, padx=10, pady=5) |
image |
Ein Bild, das im Label angezeigt werden soll. | Label(root, image=my_image) |
compound |
Bestimmt, wie Text und Bild im Label angeordnet werden. | Label(root, text="Hello", image=my_image, compound="left") |
bitmap |
Ein Bitmap-Name, das im Label angezeigt werden soll. | Label(root, bitmap="info") |
underline |
Die Position des unterstrichenen Buchstabens im Text. | Label(root, text="Underline", underline=0) |
cursor |
Der Cursor, der angezeigt wird, wenn die Maus über das Label bewegt wird. | Label(root, cursor="hand2") |
state |
Der Status des Labels: normal, disabled oder active. | Label(root, state="disabled") |
Button-Widget
Das Button-Widget wir verwendet, um einen Knopf zu erstellen und diesen verwenden zu können.
from tkinter import *
fenster = Tk()
button1 = Button(fenster, text="Schließen", command=destroy())
button1.place(x=10,y=10)
fenster.mainloop
Hierbei hat das Button-Widget viele Attribute:
Attribut | Beschreibung | Beispiel |
---|---|---|
text |
Der Text, der im Widget angezeigt werden soll. | text="Hello, World!" |
font |
Die Schriftart des Textes. | font=("Helvetica", 12) |
bg |
Die Hintergrundfarbe des Widgets. | bg="blue" |
fg |
Die Vordergrundfarbe (Textfarbe) des Widgets. | fg="white" |
width |
Die Breite des Widgets in Zeichen. | width=20 |
height |
Die Höhe des Widgets in Zeilen. | height=2 |
relief |
Der Relief-Stil des Widgets (z. B. "flat", "raised", "sunken", "ridge", "groove"). | relief="raised" |
justify |
Die Ausrichtung des Textes im Widget ("left", "right", "center"). | justify="center" |
anchor |
Die Position des Textes innerhalb des Widgets ("n", "s", "e", "w", "center"). | anchor="center" |
padx |
Der Abstand des Textes zum linken und rechten Rand des Widgets. | padx=10 |
pady |
Der Abstand des Textes zum oberen und unteren Rand des Widgets. | pady=5 |
image |
Ein Bild, das anstelle von Text im Widget angezeigt werden soll. | image=my_image |
command |
Eine 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.
from tkinter import *
fenster = Tk()
entry1 = Button(fenster, text="Nummer")
entry1.place(x=10,y=10)
fenster.mainloop
Hierbei hat das Entry-Widget viele Atributte:
Attribut | Beschreibung | Beispiel |
---|---|---|
text |
Der Text, der im Entry-Widget angezeigt oder bearbeitet werden soll. | text="Vorname" |
font |
Die Schriftart des Textes im Entry-Widget. | font=("Helvetica", 12) |
bg |
Die Hintergrundfarbe des Entry-Widgets. | bg="weiß" |
fg |
Die Vordergrundfarbe (Textfarbe) des Entry-Widgets. | fg="schwarz" |
width |
Die Breite des Entry-Widgets in Zeichen. | width=20 |
show |
Ein Zeichen, das anstelle des eigentlichen Textes im Entry-Widget angezeigt wird (z. B. für Passwörter). | show="*" |
justify |
Die Ausrichtung des Textes im Entry-Widget ("left", "right", "center"). | justify="center" |
borderwidth |
Die Breite der Rahmenlinie des Entry-Widgets. | borderwidth=2 |
relief |
Der Relief-Stil des Entry-Widgets (z. B. "flat", "raised", "sunken", "ridge", "groove"). | relief="sunken" |
insertbackground |
Die Farbe des Cursors im Entry-Widget. | insertbackground="rot" |
insertwidth |
Die Breite des Cursors im Entry-Widget. | insertwidth=2 |
state |
Der Zustand des Entry-Widgets ("normal", "disabled"). | state="normal" |
readonlybackground |
Die Hintergrundfarbe des Entry-Widgets, wenn es im Lesezugriffsmodus ist. | readonlybackground="grau" |
disabledbackground |
Die Hintergrundfarbe des Entry-Widgets, wenn es deaktiviert ist. | disabledbackground="grau" |
Text-Widget
Das Text-Widget ist ein großes Eingabefeld.
from tkinter import *
fenster = Tk()
text1 = Button(fenster)
text1.place(x=10,y=10)
fenster.mainloop
Hierbei hat das Text-Widget viele Atributte:
Attribut | Beschreibung | Beispiel |
---|---|---|
font |
Die Schriftart des Textes im Widget. | font=("Helvetica", 12) |
bg |
Die Hintergrundfarbe des Widgets. | bg="weiß" |
fg |
Die Vordergrundfarbe (Textfarbe) des Widgets. | fg="schwarz" |
width |
Die Breite des Widgets in Zeichen. | width=30 |
height |
Die Höhe des Widgets in Zeilen. | height=10 |
wrap |
Legt fest, wie Text in das Textfeld umgebrochen wird. | wrap="word" |
insertbackground |
Die Farbe des Cursors im Textfeld. | insertbackground="rot" |
insertwidth |
Die Breite des Cursors im Textfeld. | insertwidth=2 |
state |
Der Zustand des Textfelds ("normal", "disabled"). | state="normal" |
padx |
Der horizontaler Abstand des Textes zum linken und rechten Rand des Widgets. | padx=10 |
pady |
Der vertikaler Abstand des Textes zum oberen und unteren Rand des Widgets. | pady=5 |
highlightthickness |
Die Breite der Rahmenlinie um das Widget, wenn es den Fokus hat. | highlightthickness=2 |
highlightbackground |
Die Farbe der Rahmenlinie um das Widget, wenn es den Fokus hat. | highlightbackground="blau" |
relief |
Der Relief-Stil des Widgets (z. B. "flat", "raised", "sunken", "ridge", "groove"). | relief="sunken" |
undo |
Legt fest, ob das Textfeld die Undo-Funktion unterstützt. | undo=True |
autoseparators |
Legt fest, ob das Textfeld automatisch Trennzeichen einfügt. | autoseparators=True |
maxundo |
Die maximale Anzahl von Schritten, die im Undo-Verlauf gespeichert werden. | maxundo=50 |
yscrollcommand |
Eine Scrollbar, die vertikales Scrollen für das Textfeld ermöglicht. | yscrollcommand=scrollbar.set |
xscrollcommand |
Eine Scrollbar, die horizontales Scrollen für das Textfeld ermöglicht. | xscrollcommand=scrollbar.set |
Weblinks
- Tkinter website (englisch)
- GUIbuilder für tkinter
Einzelnachweise
- GUI-Programmierung mit Python: Layout-Manager und Layout-Management in Tkinter. Abgerufen am 20. Februar 2017.