Esta es la esencia del código con el que estoy teniendo problemas:
camelot = Canvas(main, width = 400, height = 300) camelot.grid(row = 0, column = 0, rowspan = 11, columnspan = 3) MyImage = PhotoImage(file = "sample1.gif") camelot.create_image(0, 0, anchor = NW, image = MyImage)
Esto se ejecuta al principio. Lo que quiero hacer más adelante en otra función es reemplazar "sample1.gif"
por "sample2.gif"
, y, posiblemente más tarde, reemplazar eso a su vez por "sample3.gif"
. Estoy atascado y nada de lo que he intentado ha funcionado hasta ahora.
Añadir imagen al canvas:
self.image_on_canvas = self.canvas.create_image(0, 0, image = ...)
Cambiar imagen:
self.canvas.itemconfig(self.image_on_canvas, image = ...)
Ejemplo completo:
from Tkinter import * #---------------------------------------------------------------------- class MainWindow(): #---------------- def __init__(self, main): # canvas for image self.canvas = Canvas(main, width=60, height=60) self.canvas.grid(row=0, column=0) # images self.my_images = [] self.my_images.append(PhotoImage(file = "ball1.gif")) self.my_images.append(PhotoImage(file = "ball2.gif")) self.my_images.append(PhotoImage(file = "ball3.gif")) self.my_image_number = 0 # set first image on canvas self.image_on_canvas = self.canvas.create_image(0, 0, anchor = NW, image = self.my_images[self.my_image_number]) # button to change image self.button = Button(main, text="Change", command=self.onButton) self.button.grid(row=1, column=0) #---------------- def onButton(self): # next image self.my_image_number += 1 # return to first image if self.my_image_number == len(self.my_images): self.my_image_number = 0 # change image self.canvas.itemconfig(self.image_on_canvas, image = self.my_images[self.my_image_number]) #---------------------------------------------------------------------- root = Tk() MainWindow(root) root.mainloop()
Imágenes utilizadas en el ejemplo:
ball1.gif ball2.gif
ball3.gif
Resultado:
MyImage = PhotoImage(file = "sample1.gif") labelorbuttontodisplayit.image = MyImage labelorbuttontodisplayit.configure(image=MyImage)
: P que debería hacerlo. Solo intenté usar ese código en la etiqueta o los botones, nunca como canvas, pero creo que puedes adaptar un poco ese fragmento de código.