【问题标题】:Removing an image from a Frame (tkinter, PIL)从帧中删除图像(tkinter,PIL)
【发布时间】:2020-01-27 10:12:45
【问题描述】:

我最初询问是否将图像添加到 tkinter 框架。我最终得到的代码如下:

img_load = Image.open('D:\Downloads\Pictures\Python\PNG\\2C.png')
img_load = img_load.resize((140,200), Image.ANTIALIAS)
imgRender = ImageTk.PhotoImage(img_load)
img = tk.Label(frame1, image=imgRender)
img.image = imgRender

到目前为止,这似乎还可以,但是后来我想将那个图像换成另一个。我可以在它的位置加载另一个,但我怀疑这可能会导致内存泄漏。

我在 PIL Image 对象上遇到过 close 方法,并尝试使用它。我将它绑在一个按钮上,然后单击它,没有任何反应——图像保留在屏幕上的框架中,因此它在内存中。为了清楚我在做什么,代码如下:

img_load.close()

所以看来我的做法是错误的。我确实希望将图像添加到框架中,因此我使用的代码运行良好。我只是不知道在这种情况下如何卸载该图像。

那我该怎么做呢?

编辑:我似乎需要担心两个对象。图像和照片图像。两者都是创建的对象。前者我可以用'close',但后者似乎没有这样的方法。

【问题讨论】:

    标签: python-3.x tkinter python-imaging-library


    【解决方案1】:

    我建议只使用您要显示的新图像更新标签。垃圾收集器将摆脱旧的未使用的图像。 另一点是,您可以按照自己的方式关闭图像,但这不会更新标签。

    更新标签的唯一方法是调用:

    img.configure(image="new_image")
    img.image="new_image"
    

    调用之后,如果需要,您仍然可以使用img_load.close() 关闭旧图像。但是垃圾收集器应该以任何一种方式完成工作......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-23
      • 2012-11-06
      • 2014-02-08
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多