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 möglich, unter Python das GUI-Toolkit tk zu benutzen, um Programme mit einer grafischen Benutzeroberfläche zu erstellen. Die mithilfe von Tkinter erstellten Programme können unter Windows, Mac OS und unter allen gängigen Linux-Distributionen genutzt werden.
Inzwischen gibt es mehrere Alternative GUI-Toolkits mit Python-Anbindung, unter anderem WxPython, PyQt und PySide, PyGTK, Kivy sowie PyFLTK.
Hallo Welt mini|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 zu erstellen. Dazu zählen z. B. Schaltflächen (Buttons), Schieberegler und Labels. Diese können mithilfe der Layout-Manager in übergeordneten Elementen platziert werden. Die angebotenen Layout Manager sind .pack(), .grid(), und .place().
Grid-Manager Der Grid-Manager ermöglicht es, Bedienelemente in einer Art Tabelle in das Fenster zu integrieren. 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() mini|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. mini|Label-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: AttributBeschreibungBeispieltext textvariableDer Text, der im Label angezeigt wird.text="Hello, World!" textvariable=tk_text_varbgDie 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=20heightDie Höhe des Labels in Zeilen oder Pixel.height=2wraplengthDie maximale Breite des Textumbruchs in Pixel.wraplength=200anchorDie 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=2padx, padyDer zusätzliche horizontale und vertikale Abstand um den Text im Label.padx=10, pady=5imageEin Bild, das im Label angezeigt werden soll.image=my_imagecompoundBestimmt, 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=0cursorDer 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. mini|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: AttributBeschreibungBeispieltextDer 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=20heightDie Höhe des Widgets in Zeilen.height=2reliefDer 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=10padyDer Abstand des Textes zum oberen und unteren Rand des Widgets.pady=5imageEin Bild, das anstelle von Text im Widget angezeigt werden soll.image=my_imagecommandEine 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. mini|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: AttributBeschreibungBeispielfontDie 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=20reliefDer Relief-Stil des Entry.relief="sunken"justifyDie Ausrichtung des Textes im Entry.justify="center"
Text-Widget Das Text-Widget ist ein großes Eingabefeld. mini|288x288px|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: AttributBeschreibungBeispielfontDie 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=40heightDie Höhe des Text-Widgets in Zeilen.height=10wrapDer Umbruchmodus des Textes ("none", "char", "word").wrap="word"padxDer Abstand des Textes zum linken und rechten Rand des Widgets.padx=5padyDer Abstand des Textes zum oberen und unteren Rand des Widgets.pady=5selectbackgroundDie 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=2insertofftimeDie Zeit in Millisekunden, die der Cursor im Text-Widget sichtbar bleibt, wenn er blinkt.insertofftime=300stateDer Zustand des Text-Widgets ("normal", "disabled").state="normal"undoEin boolescher Wert, der angibt, ob das Rückgängig-Feature aktiviert ist.undo=TruemaxundoDie maximale Anzahl von Schritten, die im Rückgängig-Verlauf gespeichert werden sollen.maxundo=100autoseparatorsEin boolescher Wert, der angibt, ob automatisch Trennzeichen zwischen Textblöcken eingefügt werden sollen.autoseparators=TrueinactiveselectbackgroundDie 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=TrueinsertborderwidthDie Breite des Rahmens um den Cursor im Text-Widget.insertborderwidth=1insertontimeDie Zeit in Millisekunden, die der Cursor im Text-Widget sichtbar bleibt, bevor er blinkt.insertontime=600commandEine 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 modern aussehenden Widgets mit erweiterter Funktionalität beinhaltet. Außerdem besitzt ttk mehr Widgets.
Hello World Programm mini|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: WidgetBeschreibungttk.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 Python Tcl Tk (Toolkit) Grafische Benutzeroberfläche
Weblinks
Tkinter website (englisch) GUIbuilder für tkinter
Einzelnachweise
Kategorie:Python (Programmiersprache) Kategorie:Python-Bibliothek Kategorie:GUI-Toolkit Kategorie:Freie Systemsoftware