创建第二个实例时,画布上的第一个实例图像将消失

2024-07-05 09:06:48 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在一个类上创建了一个方法,该方法创建了类电阻器的实例,当创建电阻器时,图像将显示在tkinter画布上。还有一种方法允许移动图像,所以当我创建第一个实例时,我移动图像,然后创建第二个实例,但当我这样做时,第一个图像消失了,但我相信发生的事情就是移动第二个图像的确切位置,但我不知道为什么会发生这种情况。代码如下:

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参数进行了测试,但第一个图像仍然消失,这使我相信,出于某种原因,第一个图像被删除,或者被第二个图像替换


Tags: 实例方法name图像imageselfdefcreate
1条回答
网友
1楼 · 发布于 2024-07-05 09:06:48

解决此问题的最简单方法是在加载方法上使用lru_缓存

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

相关问题 更多 >