Python 如何更新画布上的图像?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19838972/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to update an image on a Canvas?
提问by HansFritz
This is the essence of the code I'm having trouble with:
这是我遇到问题的代码的本质:
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)
This is run at the beginning. What I want to do on later in another function is replace "sample1.gif"by "sample2.gif", and, possibly later on, replace that in turn by "sample3.gif". I'm stuck and nothing I've been trying has worked so far.
这是一开始就运行。我稍后在另一个函数中想做的是替换"sample1.gif"为"sample2.gif",并且可能稍后将其替换为"sample3.gif"。我被卡住了,到目前为止我一直在尝试的任何东西都没有奏效。
采纳答案by furas
Add image to canvas:
将图像添加到画布:
self.image_on_canvas = self.canvas.create_image(0, 0, image = ...)
self.image_on_canvas = self.canvas.create_image(0, 0, image = ...)
Change image:
更改图像:
self.canvas.itemconfig(self.image_on_canvas, image = ...)
self.canvas.itemconfig(self.image_on_canvas, image = ...)
Full example:
完整示例:
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()
Images used in example:
示例中使用的图像:
ball1.gif
ball2.gif
ball3.gif 
ball1.gif
ball2.gif
ball3.gif
Result:
结果:
回答by Saelyth
MyImage = PhotoImage(file = "sample1.gif")
labelorbuttontodisplayit.image = MyImage
labelorbuttontodisplayit.configure(image=MyImage)
:P that should do it. I only tried to use that code on label or buttons, never as a Canvas, but i guess you can adapt that piece of code a bit.
:P 应该这样做。我只尝试在标签或按钮上使用该代码,而不是作为 Canvas,但我想您可以稍微调整一下这段代码。

