Вам не нужно использовать многопоточность. Во-вторых, если вы не используете sleep()
внутри отдельного потока, вы никогда не должны использовать sleep в приложении tkinter. sleep()
прерывает основной цикл и приводит к зависанию tkinter до завершения сна. Это 99,9% времени, а не то, что вы хотите сделать, поэтому здесь вы должны использовать after()
для любых временных событий.
Вы можете просто создать каждую метку для каждого изображения, а затем с помощью переменной отслеживания поднять правильную метку до верха.
Вот простой пример.
from tkinter import *
root = Tk()
root.geometry("200x200")
root.title("testing")
current_image = ""
black_image = PhotoImage(file="black.gif")
white_image = PhotoImage(file="white.gif")
black_label = Label(root, image=black_image)
white_label = Label(root, image=white_image)
black_label.image = black_image
white_label.image = white_image
black_label.grid(row=0, column=0)
white_label.grid(row=0, column=0)
def loop_images():
global current_image, black_image, white_image
if current_image == "white":
black_label.tkraise(white_label)
current_image = "black"
else:
white_label.tkraise(black_label)
current_image = "white"
root.after(100, loop_images)
loop_images()
root.mainloop()