I am trying to delete a label after a given time period but I am getting an error which I understand
here’s the code which is giving the error
def count(main_gif):
print("counting..")
file = Image.open(main_gif)
print("done")
return file.n_frames
frameCount = count(gif)
frames = [PhotoImage(file=gif, format='gif -index %i' % i) for i in
range(frameCount)] # iterating over the given number of frames
start = time.perf_counter()
def update(ind):
print(f"updating..{ind}")
frame = frames[ind]
ind += 1
if ind == frameCount:
ind = 0
label.configure(image=frame)
end = time.perf_counter()
window.after(100, update, ind)
time1 = end - start
print(int(time1))
if int(time1) == 3:
label.destroy()
print("running..")
label = Label(window)
print("label made")
label.place(x=place_x, y=place_y)
print("placed")
window.after(0, update, 0)
and heres the error
Traceback (most recent call last):
File "/usr/lib/python3.9/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/usr/lib/python3.9/tkinter/__init__.py", line 814, in callit
func(*args)
File "/home/----/Desktop/Pycharm proj 2/Modules/first(Splash_screen)/Basic/tksplash/tksplash.py", line 83, in update
label.configure(image=frame)
File "/usr/lib/python3.9/tkinter/__init__.py", line 1646, in configure
return self._configure('configure', cnf, kw)
File "/usr/lib/python3.9/tkinter/__init__.py", line 1636, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: invalid command name ".!label"```
how can I delete the label ??
Advertisement
Answer
As the error said, the label has already been destroyed when update() is triggered/executed by .after(). So you should not schedule to call update() after the label is destroyed:
def update(ind):
print(f"updating..{ind}")
frame = frames[ind]
ind += 1
if ind == frameCount:
ind = 0
label.configure(image=frame)
end = time.perf_counter()
time1 = end - start
print(int(time1))
if int(time1) == 3:
label.destroy()
print("label destroyed")
else:
window.after(100, update, ind)