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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 14:45:59  来源:igfitidea点击:

How to update an image on a Canvas?

pythontkinter

提问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 ball1.gifball2.gif ball2.gifball3.gif ball3.gif

ball1.gif 球1.gifball2.gif 球2.gifball3.gif球3.gif

Result:

结果:

enter image description here

在此处输入图片说明

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