Ich habe einen Bug in tkinter?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

In Zeile 29 rufst du die Methode Addition auf. Sie wird ausgeführt, die Konsoleneingabe getätigt und der Wert None (= Standardrückgabewert von Funktionen) zurückgegeben. Letzerer wird an das command-Attribut überreicht. Bei Klick auf deinen Button wird also nichts passieren.

Richtig wäre diese Lösung:

button["command"] = lambda: button.Addition(eingabe1, eingabe2, ausgabe)

Das command-Attribut erwartet eine Referenz auf eine parameterlose Funktion. Da deine Funktion allerdings Argumente erfordert, wäre es sinnvoll, einen Lambda-Ausdruck einzusetzen. Dies ist im Prinzip eine anonyme Funktion, die deinen Aufruf kapselt.

Wieso du für all das allerdings eine extra Klasse brauchst und Anwendungs- mit UI-Logik verbindest, kann ich nicht so wirklich nachvollziehen. Ich würde dann doch eher eine Klasse Calculator anlegen (gib Bezeichnern grundsätzlich möglichst passende Namen, damit sofort ersichtlich wird, welchem Zweck sie dienen sollen), die Funktionen für Rechenoperationen implementiert. Die können dann in Event-Handlern für verschiedene Buttons (so viel, wie man halt benötigt) aufgerufen werden.

Die Vorteile bei einer klaren Trennung zwischen Model (Berechnungen) und View (Beschreibung der grafischen Oberfläche) liegt darin, dass Code besser lesbar wird, man ihn gut testen kann (ohne dafür ein komplettes Fenster anlegen zu müssen) und eine Wiederverwendbarkeit gewährleistet ist (wenn dein Programm noch einmal woanders addieren soll, braucht es dafür keinen Button). Schau dir das MVC-Pattern dazu an.


Trissi17g 
Beitragsersteller
 02.04.2022, 11:57

Danke dir für die aufschlussreiche Antwort! Ich werde mich darum kümmern. :)

0