Skip to content
Advertisement

Creating a timer with tkinter

I am creating a GUI that needs to have timer starting from 0 and counting up every second until it reaches a limit This is the code I have right now

limit = 10
score = 0

def update():
    global score, limit
    time.sleep(1)
    score += 1
    ScoreL.configure(text=score)
    if score < limit:
        update()

ScoreL = tkinter.Label(window, text = score)
ScoreL.pack()
update()
window.mainloop

Right now this is increasing the score each second but it does not open the GUI until the score reaches the limit. How can I make it so the GUI opens when the score is 0 but will continue to update each second?

Advertisement

Answer

time.sleep() will block tkinter mainloop from updating, so you can only see the result after the score reaches the limit because at that time tkinter mainloop takes back the control.

Use .after() instead:

import tkinter

window = tkinter.Tk()

limit = 10
score = 0

def update():
    global score
    score += 1
    ScoreL.configure(text=score)
    if score < limit:
        # schedule next update 1 second later
        window.after(1000, update)

ScoreL = tkinter.Label(window, text=score)
ScoreL.pack()

window.after(1000, update) # start the update 1 second later
window.mainloop()
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement