Ich versuche, eine kleine Python-GUI-App mit Tkinter zu bauen. Ein Hauptfenster öffnet sich, wenn die App geöffnet wird. Dann kann man auf einen Button klicken, um einen neuen Toplevel zu öffnen. In dieser Toplevel gibt es einen Timer (Countdown), der startet, wenn eine Taste gedrückt wird.Tkinter friert ein, während auf Callback warten mit nach
Mein Problem ist, dass die Toplevel friert, während der Timer herunter zählt. Ich habe wahrscheinlich etwas Grundlegendes über Tkinter verpasst (und wie man den Code strukturiert). Ich hoffe, Sie können klären, warum der Code nicht wie vorgesehen funktioniert.
from tkinter import *
class Application:def __init__(self, master=NONE):
self.root = Tk()
btnTimer = Button(self.root, text="Open timer", command=self.open_timer)
btnTimer.grid(row=1, column=0)
self.root.mainloop()
def open_timer(self):
# Hide main window
self.root.withdraw() # Hide main window
# Make window for controls
self.wdowControl = Toplevel(self.root)
# Timer
self.wdowControl.timerText = Label(self.wdowControl, text="00:00:00", font=("Helvetica", 80))
self.wdowControl.timerText.grid(row=0, column=0)
btnStart = Button(self.wdowControl, text="Start timer", command=self.start_timer)
btnStart.grid(row=1, column=0)
def start_timer(self):
self.update_timer(5) # Timer in seconds
def update_timer(self, t):
if t > 0:
m, s = divmod(t, 60)
h, m = divmod(m, 60)
timeLeft = "%d:%02d:%02d" % (h, m, s)
self.wdowControl.timerText.configure(text=timeLeft)
t -= 1
self.wdowControl.after(1000, self.update_timer(t))
else:
self.wdowControl.timerText.configure(text="00:00:00", fg='red')
app = Application())
Hinweis:Ich begann gestern mit Python Codierung und ich habe wahrscheinlich mit den grundlegenden Dingen nicht gestartet ich zuerst lernen sollte. Aber hey, das macht mich glücklich. :)
Danke! Kennst du die Logik dahinter? – sgtbp
Wenn Sie nach einer Phrase '()' setzen, versucht Python, diese Funktion aufzurufen, unabhängig davon, ob sie in einer Anweisung wie 'after' steht. Tkinter verwendet daher den Funktionsnamen, den Sie aufrufen möchten, und alle Argumente, die Sie übergeben möchten, so dass dies bei der Angabe möglich ist. – SneakyTurtle