gpt4 book ai didi

python - 在 tkinter Canvas 中显示图像

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:37 24 4
gpt4 key购买 nike

我在尝试创建 Canvas 图像时遇到一些问题,一个类处理图像的创建,并且我希望该类创建与我调用它的次数一样多的图像。

我的代码是这样的

from tkinter import *
from random import *

canvas_width = 800
canvas_height = 800

master = Tk()
canvas = Canvas(master, width=canvas_width, height=canvas_height, bg="black")
canvas.pack()

def images():
for _ in range(3):
Image_creator().create_image()

class Image_creator:

def create_image(self):

start_x = randint(1, canvas_width//2)
start_y = randint(1, canvas_height//2)

img = PhotoImage(file="pac_inizio.png")
master.img = img
self.image = canvas.create_image(start_x, start_y, anchor=NW, image=img)

images()

mainloop()

实际上,使用此代码仅显示 3 个图像中的 1 个,我认为其他 2 个 Canvas 图像已创建,但内部没有图像。我尝试更改 create_image 函数来创建按钮而不是 Canvas 图像,并了解它是否确实如我所想。如果你使用修改后的函数运行代码,它会显示 3 个按钮,但只有一个带有图像。

def create_image(self):

start_x = randint(1, canvas_width//2)
start_y = randint(1, canvas_height//2)

img = PhotoImage(file="pac_inizio.png")
master.img = img
self.image = Button( anchor=NW, image=img)
self.image.place(x=start_x, y=start_y)

我认为问题出在图像引用中,但不知道如何解决

最佳答案

您似乎意识到 tkinter 中的图像被垃圾收集的常见问题,尽管它们仍在某处使用,除非有对该图像的明确引用。但请注意,使用 master.img = img 您将始终只能引用三个(相同)图像中的一个。如果这些图像在您的实际代码中是不同的,请将 master.img 设为一个列表(或使用全局分数中的任何其他列表来存储图像)。

但是,由于图像是相同的,您也可以直接在全局范围内而不是在方法中加载图像一次,然后使用该图像。此外,仅针对该一种方法使用该类并没有多大意义(更重要的是,因为该实例也在循环中被垃圾收集)。

img = PhotoImage(file="pac_inizio.gif") # create once in global score
def create_image(): # regular function, not method
start_x = randint(1, canvas_width//2)
start_y = randint(1, canvas_height//2)
canvas.create_image(start_x, start_y, anchor=NW, image=img)

关于python - 在 tkinter Canvas 中显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54494075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com