nun versuche ich einen anfang in die Objektorientierte Programmierung zu finden.
So ganz erschließt sich mir zwar das Konzept, die sinnvolle Verwendung dessen aber noch nicht ganz.
Ich habe mehre Fenster in tkinter, sowie muss ich Benutzereingaben verarbeiten und Berechnungen ausführen.
Bisher hatte ich das funktional gelöst, doch dachte ich mir ich schreibe es OOP. Soll ja übersichtlicher und leichter zu warten sein hört man immer.
konkret heißt das ich schreibe für jedes Fenster eine eigene Klasse.
ich habe eine (Klasse children window) von der das erste Fenster gezeichnet wird. Von dort aus mochte ich zum Fenster (main window) in der dann die Berechnungen stattfinden, und natürlich wieder zurück. Diese Berechnungen (Klasse Algo) finden dann in einer ganz anderen Klasse statt, die so erstmal nichts mit den Fenstern zu tun hat.
Ich habe dabei alle Attribute die ich nur intern brauche mit einem unterstrich begonnen. Ebenso bei den Methoden.
Nun es funktioniert soweit alles.
nur meine Frage an euch ist jetzt ob ich das ganze jetzt korrekt und vor allem sinnvoll benutzt habe.
Ich stelle hier ein kleines Stück Code rein (vereinfacht nur als Beispiel), um vielleicht zu zeigen wie ich es mein.
Code: Alles auswählen
import tkinter as tk
class Algo():
# Hier sind viele Methoden zum berechnen
# Die klasse hat nichts mit den Fenster Klassen zu tun
#
#
# beispiel
def add(self, String):
tmp = main()
String += tmp.Dateiname
return String
class main():
def __init__(self):
# Attribute die auch von aussen verfügbar sein müssen
self.Dateiname = "Testdatei.dat"
def create(self):
self._main = tk.Tk()
buttonback = tk.Button(self._main, text="back", command=self._back)
buttonback.pack()
# Buttons die auf Methoden der aktuellen Klasse zugreifen
button2 = tk.Button(self._main, text="add", command=self._go)
button2.pack()
self._label = tk.Label(self._main, text="TestLabel|")
self._label.pack()
self._main.mainloop()
def _go(self):
# hier wird die Algorithmus Klasse aufgerufen sowie Bedingungen geprüft
# hier werden auch die Elemte des Fensters manipuliert
A1 = Algo()
self._label["text"] = A1.add(self._label.cget("text"))
def _back(self):
self.destroy()
child_window = window()
child_window.create()
def destroy(self):
self._main.destroy()
class window():
def create(self):
self._main = tk.Tk()
tk.Label(self._main, text="test1").pack()
tk.Label(self._main, text="test2").pack()
tk.Label(self._main, text="test3").pack()
button = tk.Button(self._main, text="weiter", command=self._weiter)
button.pack()
self._main.mainloop()
def destroy(self):
self._main.destroy()
def _weiter(self):
self.destroy()
main_window = main()
main_window.create()
new = window()
new.create()