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,但我想您可以稍微调整一下这段代码。