Du Importierst tkinter sowohl als Sterncheimport als auch über den Namen tk. Ersters solltest Du nicht tun, weil Du damit unkontrolliert Namen in Deinen Namensraum holst. Genauso bei Frames, wobei ich nicht weiß was Frames ist und das gar nicht verwendet wird. numpy wird auch nicht verwendet.
Du benutzt globale Variablen, was Du schnell beseitigen solltest. Funktionen erhalten alle ihre Eingaben über Parameter. Bei GUI-Programmen kommt noch dazu, dass sie sehr statusbehaftet sind und man deshalb praktisch nicht daran vorbeikommt, eigene Klassen zu schreiben.
Was soll die 1 bei startButton1 und stopButton1? Die Schreibweise hält sich nicht an die Konvention, dass alle Variablen klein_mit_unterstrich geschrieben werden.
In Zeile 15 ist die Einrückung falsch. Strings sind auch kein Ersatz für Kommentare.
fLEntry ist ein ganz schlechter Variablenname, nicht nur wegen der Schreibweise, sondern auch, weil völlig unklar ist, was denn das f oder L zu bedeuten hat und Entry viel zu generisch ist. Ohne gute Variablenname ist Code nur schwer zu lesen und man muß raten, was er zu bedeuten hat.
Bei GUI-Programmierung dürfen Methoden nur sehr kurz laufen, weil sonst die GUI einfriert. countDown hat eine Schleife mit sleep. Das ist immer Falsch. Wie hier schon mehrfach angesprochen, gibt es bei TkInter die after-Methode, die eine Funktion nach einer bestimmten Zeit aufruft.
Alles ab Zeile 35 gehört auch in eine Funktion. Damit werden automatisch alle jetzt globalen Variablen zu lokalen und man kommt nicht in Versuchung, sie in anderen Funktionen "einfach so" zu verwenden.
Zeile 41 ist irgendwie nutzlos. Man sollte nicht place verwenden, sondern pack oder grid um Element zu platzieren. Das Fenster mag auf Deinem Rechner schön aussehen, bei einer anderen Auflösung oder in einem anderen Betriebssystem sieht es aber entweder nicht gut aus, oder ist gar nicht benutzbar.
Ungetestet:
Code: Alles auswählen
import tkinter as tk
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.counter = 100
self.running = False
self.title('Einfacher down Zähler')
tk.Label(self, text="Runter zählen:").grid(0,0)
self.display = tk.Label(self, text=self.counter)
self.display.grid(1,0)
self.start_button = tk.Button(self, text="Start", command=self.start, state=tk.NORMAL, fg= "blue")
self.stop_button = tk.Button(self, text="Stop", command=self.stop, state=tk.DISABLED)
self.start_button.grid(0,1)
self.stop_button.grid(1,1)
def start(self):
self.start_button.config(state=tk.DISABLED)
self.stop_button.config(state=tk.NORMAL)
self.running = True
self.after(100,self.count_down)
def stop(self):
self.start_button.config(state=tk.NORMAL)
self.stop_button.config(state=tk.DISABLED)
self.running = False
def count_down(self):
self.counter -= 1
self.display.config(text=self.counter)
if self.counter > 0 and self.running:
self.after(100, self.count_down)
def main():
app = App()
app.mainloop()
if __name__ == '__main__':
main()