Tkinter – Verwendung einer Klasse

In den bisherigen hier veröffentlichten Tkinter-Tutorials spielte die objektorientierte Programmierung keine Rolle. Dies wird sich mit diesem Blogbeitrag ändern. Ich knüpfe dabei an das Einsteiger-Tutorial zu Tkinter an, in dem gezeigt wurde, wie ein Fenster mit einem Label-Widget erstellt werden kann. Der Code zu jenem Projekt sah wie folgt aus:

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="top")

root.mainloop()

Im Ergebnis erhält man dieses Fenster:

tkinter window with a hello-world label

Dieses Beispiel wird dahingehend geändert, dass eine Klasse mit der Bezeichnung MainWindow() verwendet wird, die die Erstellung eines Fensters übernimmt. Dieses Fenster soll 500*300 Pixel groß sein, in der Mitte des Bildschirms angezeigt werden und in der Größe nicht veränderbar sein.

#!/usr/bin/env python3

import tkinter as tk

class MainWindow():
    def __init__(self):

        self.window = tk.Tk()
        self.window.title("Main Window")

        # Set width and height of the window
        window_width = 500
        window_height = 300

        # Get the screen dimension
        screen_width = self.window.winfo_screenwidth()
        screen_height = self.window.winfo_screenheight()

        # Find the center point
        center_x = int(screen_width / 2 - window_width / 2)
        center_y = int(screen_height / 2 - window_height / 2)

        # Set the position of the window to the center of the screen
        self.window.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}")

        # Window is not resizable
        self.window.resizable(False, False)

    def mainloop(self):
        self.window.mainloop()


if __name__ == "__main__":
    app_instance = MainWindow()
    app_instance.mainloop()

Im Gegensatz zu den Beispielen in meinen anderen Tkinter-Tutorials, wird hier eine Klasse verwendet (MainWindow). Sie muss instanziiert werden, was in

if __name__ == "__main__":
    app_instance = MainWindow()

erfolgt. Der Code ist nicht sonderlich schwierig. Anhand der Kommentare sollte deutlich werden, welche Auswirkungen die einzelnen Code-Abschnitte haben. Im Ergebnis erhält man ein leeres Fenster:

Main Window created with Tkinter

Der gezeigte Code mag als Ausgangspunkt für Eure Projekte dienen. Im nächsten Artikel zu Tkinter zeige ich dann, wie zu diesem Beispiel Widgets mithilfe des Grid Layout Managers hinzugefügt bzw. angeordnet werden können.

Zuletzt aktualisiert am 1. Dezember 2023