2013-11-07 4 views
4

Это суть кода У меня возникли проблемы с:Как обновить изображение на холсте?

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) 

Это выполняется в самом начале. То, что я хочу сделать позже в другой функции, - это заменить "sample1.gif" на "sample2.gif" и, возможно, позже заменить его, в свою очередь, на "sample3.gif". Я застрял, и ничто из того, что я пытался, пока не работает.

ответ

16

Добавить изображение на холст:

self.image_on_canvas = self.canvas.create_image(0, 0, image = ...)

Изменить изображение:

self.canvas.itemconfig(self.image_on_canvas, image = ...)


Полный пример:

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() 

Изображения, используемые в примере:

ball1.gif ball1.gif ball2.gif ball2.gifball3.gif ball3.gif

Результат:

enter image description here

+0

спасибо, что это именно то, что мне нужно! – HansFritz

0
MyImage = PhotoImage(file = "sample1.gif") 
    labelorbuttontodisplayit.image = MyImage 
    labelorbuttontodisplayit.configure(image=MyImage) 

: P, который должен это сделать. Я только пытался использовать этот код на ярлыке или кнопках, но не как Canvas, но, я думаю, вы можете немного адаптировать этот фрагмент кода.

Смежные вопросы