canvas 上的第一个实例图像在创建第二个实例时消失

First instance image on canvas disappears when second instance is created

所以我在 class 上创建了一个方法来创建 class 电阻器的实例,当创建电阻器时,图像将出现在 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