Home > Software design >  Label not updating in tkinter
Label not updating in tkinter

Time:07-26

I have asked a very similar question I believe 2 days ago and it got closed as a mod told me to look at other similar questions but none of the solutions worked. Does anyone have any idea how to fix the error. Here is the code at the moment all it does is print and display the first number in the sequence:

import tkinter as tk
#import time

window = tk.Tk()
window.title("Hello wold")
window.geometry("300x300")
timer = int(input("time in seconds "))

def update():
  global timer
  timer -= 1
  print(timer)
  hello = tk.Label(window, textvariable = timer)
  hello.pack()
for i in range(timer):
  window.after(1000, update)
  tk.mainloop()

CodePudding user response:

change textvariable= timer to text= timer

CodePudding user response:

There are few issues in your code:

  • it is not recommended to use console input() in a GUI application
  • the for loop will be blocked by tk.mainloop() until the root window is closed. However the next iteration will raise exception since the root window is destroyed. Actually the for loop is not necessary.

Below is a modified example:

import tkinter as tk

window = tk.Tk()
window.title("Hello World")
window.geometry("300x300")

# it is not recommended to use console input() in a GUI app
#timer = int(input("time in seconds: "))
timer = 10  # use sample input value

def update(timer=timer):
    hello['text'] = timer
    if timer > 0:
        # schedule to run update() again one second later
        hello.after(1000, update, timer-1)

# create label once and update its text inside update()
hello = tk.Label(window)
hello.pack()

update() # start the after loop

# should run mainloop() only once
window.mainloop()

CodePudding user response:

import tkinter as tk
#import time

window = tk.Tk()
window.title("Hello wold")
window.geometry("300x300")
timer = int(input("time in seconds "))
hello = tk.Label(window, text= timer)
hello.pack()
def update():
  global timer
  timer -= 1
  print(timer)
  hello.config(text=timer)

for i in range(timer):
  window.after(1000, update)
tk.mainloop()

something like this should work

  • Related