Tkinter mit Klassen
Bisher habe ich den Code im GUI Tutorial recht simpel gehalten. Habe also keine Klassen verwendet. Es macht jedoch wirklich Sinn, da es viel geordneteren Code ermöglicht. Schauen wir uns dazu das Beispiel aus dem letzten Artikel mit einer Klasse an.
from tkinter import *
class programm(Frame):
def hallo(self):
print("Halli Hallo")
def widgetsAnlegen(self):
self.schliessenButton = Button(self, text= "Schließen", bg="green", fg="red", command = self.quit)
self.schliessenButton.pack(side=LEFT)
self.hiButton = Button(self, text = "Hallo", bg = "yellow", fg="blue", command =self.hallo)
self.hiButton.pack(side=LEFT)
def __init__(self, master):
Frame.__init__(self, master)
self.pack()
self.widgetsAnlegen()
root = Tk()
app = programm(master=root)
app.mainloop()
root.destroy()
Wie unterscheiden sich die beiden Möglichkeiten? Naja, auf der einen Seite haben wir den Code zwar simpel gehalten, aber schwierig sauber zu erweitern. In diesem Fall haben wir eine saubere Klasse, die genau zwei Sachen macht. Sie erstellt unsere GUI und beinhaltet ihr verhalten.
Beachte, dass wir jetzt statt root bei den Buttons zu übergeben self als ersten Parameter übergeben. Das kommt daher, dass jedes Objekt unserer klasse einen master erwartet. In diesem Fall übergeben wir ihr ein Tk Objekt (root). Und genau das sollte man auch machen. Wann immer du also master siehst, solltest du ihm dein Hauptfenster übergeben, also root. Denn root ist ja unser Hauptfenster welches ja ein Objekt von Tk() ist.
Außerdem starten wir den mainloop nun nicht direkt auf dem root, sondern auf unserem Objekt der programm Klasse.
An sich ist das ganze nicht großartig anders, nur dass wir eben hier mit vielen self arbeiten.