gpt4 book ai didi

python - 创建第二个实例时, Canvas 上的第一个实例图像消失

转载 作者:行者123 更新时间:2023-12-04 03:43:24 26 4
gpt4 key购买 nike

所以我在一个类上创建了一个方法来创建类电阻器的实例,当创建一个电阻器时,图像将出现在 tkinter Canvas 上。还有一种允许移动图像的方法,所以发生的事情是当我创建第一个实例时,我移动图像,然后创建第二个实例,但是当我这样做时,第一个图像消失了,但我相信发生的事情是它正好移动到第二张图片所在的位置,但我不知道为什么会这样。这是代码:

class SideBar():
def createResistor(self, value, name): # Method used to create instance of class Resistor
Res1 = Resistor(self.root, value, name)
self.resList.append(Res1)

class Resistor():
def cargarimg(self, archivo): # Se carga imagen
ruta = os.path.join('img', archivo)
imagen = PhotoImage(file = ruta)
return imagen

def show_res(self):
resImage = self.cargarimg('Res.png')
MA.MP.paintWindow.image = resImage
MA.MP.paintWindow.create_image(100, 100, image = resImage)

def move(self, e): # Method that allows image to be moved
resImage = self.cargarimg('Res.png')
MA.MP.paintWindow.image = resImage
MA.MP.paintWindow.create_image(e.x, e.y, image = resImage)

def __init__(self, root, resistance, name):
self.root = root
self.resistance = resistance
self.name = name
self.x = 50
self.y = 50
self.show_res()
MA.MP.paintWindow.bind('<B1-Motion>', self.move)

更新 我已经通过设置坐标 x 和 y 参数进行了测试,但是第一张图片仍然消失了,这让我相信第一张图片由于某种原因被删除或者它是替换为第二张图片。

最佳答案

解决此问题的最简单方法是在加载方法上使用 lru_cache。

from functools import lru_cache

class Resistor():
@lru_cache(None)
def cargarimg(self, archivo): # Se carga imagen
ruta = os.path.join('img', archivo)
imagen = PhotoImage(file = ruta)
return imagen

这会替换图像引用保存,因此您可以从所有方法中删除这一行。

    MA.MP.paintWindow.image = resImage

关于python - 创建第二个实例时, Canvas 上的第一个实例图像消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65556046/

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