Impressum
< Index

GUI - Fenster und Labels

Um tkinter zu verwenden, müssen wir es importieren mit from tkinter import *.
Um ein erstes Fenster zu erzeugen, benötigen wir ein Objekt der Klasse Tk, das wir mit der Methode mainloop() starten.
Ein Fenster anzeigen
from tkinter import *

fenster = Tk()
fenster.mainloop()
Den Fenster-Titel setzt man mit der Methode title(fenstername), die Größe des Fensters kann man mit der geometry("300x200") auf 300x200 setzten.
Ein Fenster anzeigen
from tkinter import *

fenster = Tk()
fenster.geometry("300x200")
fenster.title("Mein Fenster")
fenster.mainloop()
Ein Fenster
Ein Fenster
Ein Fenster mit Titel
Ein Fenster mit Titel

Label

Ein Label ist ein Gui-Element (in TKinter Widget genannt), dass Text (und auch ein Bild) anzeigen kann.
Man erzeugt ein Label-Objekt mit meinLabel = Label(container, text="Hallo").
Hierbei ist container das Fenster-Objekt selbst. Bei komplexeren Oberflächen ist es oft ein Frame der Teil der Oberfläche ist.
Mit meinLabel.pack() packt man es auf den Container. Pack ist ein einfacher Weg um Gui-Element nebeneinander auf die Oberfläche zu packen. Für komplexere Oberfläche verwendet man grid, doch noch halten wir es einfach.
Ein Fenster anzeigen
from tkinter import *

fenster = Tk()
fenster.title("Mein Fenster")
meinLabel = Label(fenster, text="hallo")
meinLabel.pack()
fenster.mainloop()
Im Constructor des Label-Widgets können Optionen mitgegeben werden, text ist eine Option. Optionen werden mit Komma getrennt aufgezählt.
Option Beschreibung
textDer Text, der angezeigt wird
fg/foregroundTextfarbe, entweder als Name (wie "white") oder hexadezimal (wie "#FF0000")
bg/backgroundHintergrundfarbe
height Höhe in Zeilen
width Breite in Buchstaben
wraplength Breite nach der umgebrochen wird.
Diese Längen benötigen eine Einheit: m für Millimeter, c für Zentimeter, p für Pixel
Bsp.: wraplength="3c"
padx Abstand in x-Richtung
pady Abstand in y-Richtung
font Schriftart, z.B. "Arial 20"
Fenster mit zwei Labels
from tkinter import *

fenster = Tk()
#fenster.geometry("300x200")
fenster.title("Mein Fenster")
meinLabel = Label(fenster, text="hallo", font="arial 20", bg="white", height=3, width=8)
meinLabel.pack()

s = "Das ist ein langer Text, der auf einem Label dargestellt wird."
lab = Label(fenster, text=s, font="arial 20", wraplength="4c", padx=20)
lab.pack()

fenster.mainloop()
Ein Fenster mit zwei Labels, die Optionen haben
Fenster mit 2 Labels

Fenster als Klassen

Eine Oberfläche besteht oft aus vielen Klassen, da nicht nur die Oberfläche aufgebaut werden muss, sondern auch auf Ereignisse wie den Klick auf einen Button reagiert werden muss.
Man hat hierfür zwei Möglichkeiten:
Gui in Klasse gekapselt
from tkinter import *

class Fenster:
    def __init__(self):
        self.fenster = Tk()
        self.fenster.title("OOP Gui")
        self.__initGui()
        
    def __initGui(self):
        Label(self.fenster, text="Das ist besser").pack()
        Label(self.fenster, text="und strukturierter").pack()
    def start(self):
        self.fenster.mainloop()
        
f = Fenster()
f.start()
Klasse als GUI
from tkinter import *

class Fenster(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.option_add("*Font", "aerial 20")
        self.title("OOP Gui")
        self.__initGui()
        
    def __initGui(self):
        Label(self, text="Das ist besser").pack()
        Label(self, text="und strukturierter").pack()
    
        
f = Fenster()
f.mainloop()