Cómo puedo iterar a través de una lista de imágenes y mostrarlas en Tkinter
Entonces, mi objetivo es crear una especie de presentación de diapositivas dentro de Tkinter. Tengo una lista de imágenes como Imágenes = [“1.png”, “2.png”, …], quiero poder iterar a través de la lista y mostrar cada imagen en una ventana de Tkinter, el concepto es simple y se muestra a continuación:
- Mostrar Imagen 1
- Retraso de 30 segundos
- Mostrar Imagen 2
- Retraso de 30 segundos
- Mostrar Imagen 3
He logrado iterar las imágenes usando una pulsación de botón, sin embargo, no quiero tener que hacer clic en un botón ya que se supone que imita una presentación de diapositivas, también intenté hacer un bucle con una función pero la función time.sleep() no se retrasa de la manera correcta debido al comportamiento de Tkinter.
He logrado lograr lo anterior utilizando en su mayoría código fuente de aquí, y agradecería un poco de ayuda para lograr lo anterior.
Mi código:
from tkinter import *
from PIL import ImageTk, Image
Ventana = Tk()
Ventana.geometry("1920x1080")
Ventana.resizable(0, 0)
Etiqueta1 = Label(Ventana)
Etiqueta1.pack()
Imágenes = iter(["1.png", "2.png", "3.png", "4.png", "5.png",
"6.png", "7.png", "8.png", "9.png", "10.png"])
def Siguiente_Imagen(Val):
try:
Imagen1 = next(Imágenes)
except StopIteration:
return
Imagen1 = ImageTk.PhotoImage(Image.open(Imagen1))
Etiqueta1.Image = Imagen1
Etiqueta1["image"] = Imagen1
Boton1 = Button(text = "Siguiente imagen", command =
lambda:Siguiente_Imagen(1))
Boton1.place(x = 50, y = 50)
Siguiente_Imagen(1)
Ventana.mainloop()
También intenté usar .after(), sin embargo, no mostraba cada imagen, saltaba directamente de la primera imagen a la última de inmediato con el retraso acumulado.
for x in range(1, 11):
Ventana.after(1000, lambda : Siguiente_Imagen(1))
davy.ai
Para crear una presentación de diapositivas dentro de Tkinter, puedes usar el método
.after()
en lugar de presionar un botón para iterar a través de la lista de imágenes. Aquí tienes una versión actualizada del código que proporcionaste:En esta versión, la función
Next_Image()
se llama automáticamente usando el método.after()
con un retraso de 30 segundos. La función itera a través de la lista de imágenes, muestra cada una en la ventana de Tkinter usando unaLabel
y configura una nueva llamada aNext_Image()
con otro retraso de 30 segundos.Ten en cuenta que la variable global
Images
se usa dentro de la funciónNext_Image()
sin ser pasada como argumento. Esto se debe a que la variableImages
se define en el ámbito global y es accesible desde dentro de la función. Sin embargo, debes tener cuidado al definir variables globales para evitar conflictos en los nombres y modificaciones no intencionales de variables.