Button zum Hochzählen von Variablen (Python)?
Könnte mir jemand erklären, warum der Error Variable vor Assignment verwendet kommt? Ich hab die doch schon oben deklariert.
![Das Skript - (programmieren, Python, Tkinter)](https://images.gutefrage.net/media/fragen/bilder/button-zum-hochzaehlen-von-variablen-python/0_big.jpg?v=1508919729000)
4 Antworten
Hallo!
In deinem Programm sind ein paar Fehler vorhanden, die ich versuchen werde zu erläutern.
Erstmal ist in deinem Bild gar kein Fehler vorhanden, klingt kurios, aber ist so.
"Process finished with exit code 0"
Dies bedeutet das dein Programm einwandfrei funktioniert. Einwandfrei heißt in diesem Fall aber nur, dass deine Datei einmal durchlaufen wurde und der Compiler kein Fehler entdeckt hat.
Vorwort:
Mein Code basiert auf der Version Python 3.6.0. Dies ist für die Programmierung und Erläuterung in Python leider relevant, da die Versionen nicht unbedingt kompatibel sind.
Mainloop fehlt:
Dennoch funktioniert dein Code nicht, da du zwar den Button und dein Label in den Hauptcontainer geladen wurden, aber Klicker.mainloop() fehlt. Resultierend wird deine GUI nicht aufgerufen.
Der Button und die KlickKnopf Methode:
In deinem Button hast du als command "KlickKnopf()" angegeben. Dies führt zur einmaligen Ausführung beim eintreten des Mainloops. Ein erneuter Klick hat keine Auswirkungen!
Richtig muss es heißen: "command=KlickKnopf". Hierdurch wird bei jedem klicken auf den Button die Methode KlickKnopf aufgerufen.
Bitcoins als globale Variable:
Einerseits hast du Bitcoins in deinem Hauptprogramm definiert, indess es als lokale Variable des Hauptprogramms läuft und zusätzlich definierst du Bitcoins nochmals lokal in deiner KlickKnopf Methode.
Um deinem Programm verständlich zu machen das du Bitcoins der Hauptmethode meinst, müsstest du die Variable als global definieren. Nun wäre eine Inkrementierung möglich. Globale Variablen zu verwenden birgt allerdings Sicherheitsrisiken. Aus diesem Grund würde ich eher mit Klassenobjekten arbeiten, aber dies war nicht deine Frage.
Aktualisierung deines Labels:
Dein Knopf selbst kann zwar bislang gedrückt werden, aber ohne das dein Label in der Methode KlickKnopf aktualisiert wird, wirst du kein Ergebnis sehen. Innerhalb meines Bildes, habe ich nochmals eine Aktualisierungsfunktion geschrieben, die das Label über die configure Methode aktualisiert.
Fazit:
In deinem Code waren einige Fehler, die jetzt hoffentlich etwas klarer sind.
Zusammenfassend kann man folgendes sagen:
- Setze immer ein Mainloop
- Beschäftige dich mal mit dem OOP Ansatz in Python, da dort dein globales Problem gelöst wird.
Falls noch Fragen sein sollten, helfe ich dir gerne weiter! Dennoch hoffe ich, dass all deine Fragen geklärt werden konnten!
Liebe Grüße
Norman
![- (programmieren, Python, Tkinter)](https://images.gutefrage.net/media/fragen-antworten/bilder/262925997/0_big.jpg?v=1508929679000)
Global vs. lokal, falls Du die Variable Bitcoins meinst, Dein Text ist leider fast nicht zu verstehen. "Bitcoins" nach "from ..." ist per Definition eine andere Variable (global) wie "Bitcoin" in KlickKnopf (lokal)
https://www.python-kurs.eu/global_lokal.php
"global Bitcoins" in KlickKnopf löst das Problem, ist aber nicht unbedingt guter Stil. Globale Variablen sollte man eigentlich vermeiden.
Hab ich doch geschrieben? "global Bitcoins" in KlickKnopf deklarieren ... und sich damit beschäftigen wie diese Sachen zusammenhängen.
Hi, ich bin mir nicht ganz sicher wie Python das verarbeitet, aber vielleist solltest Du die Variable Bitcoins lieber als integer deklarieren um diese sauber hochzuzählen...
Ich würd ja tkinter apps immer in ne eigene klasse schreiben, nicht da einfych so.
Lösungsvorschläge?