私が問題を抱えているコードの本質は次のとおりです:
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"
行き詰まっていて、これまで試したことは何もうまくいきませんでした。
ベストアンサー1
キャンバスに画像を追加する:
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()
例で使用される画像:
ボール1.gifボール2.gifボール3.gif
結果: