Tkinter在更新图像时使用内存;如何停止内存使用?

时间:2017-12-10 01:07:57

标签: python tkinter

我有一个要在主页面上显示的图像,我每10秒钟更新一次。我打开图像,设置标签,然后将图片引用回图像,这样它就不会被垃圾收集并消失。 我一接受" plant_stat_panel.image = plant_stat_img"它停止咀嚼记忆。在自己停止内存消耗后更新映像和清理的正确方法是什么?

from tkinter import *
from PIL import ImageTk, Image

root= Tk()

def img_updater():
    plant_stat_img = ImageTk.PhotoImage(Image.open("/home/pi/wateringsys/html/temp.png"))#/home/pi/html/
    plant_stat_panel = Label(root, image = plant_stat_img)
    plant_stat_panel.image = plant_stat_img
    plant_stat_panel.grid(row = 5,column = 0, columnspan=2, sticky = W )

    root.after(10000, img_updater)

root.after(0,img_updater)
root.mainloop() 

1 个答案:

答案 0 :(得分:1)

目前,您每10秒制作一个新标签,并覆盖(不删除)较旧的标签。您需要将Label设置一次,然后更新 Label,而不是每次都创建一个新的。

from tkinter import *
from PIL import ImageTk, Image

root= Tk()
plant_stat_panel = Label(root)
plant_stat_panel.grid(row = 5,column = 0, columnspan=2, sticky = W )

def img_updater():
    plant_stat_img = ImageTk.PhotoImage(Image.open("/home/pi/wateringsys/html/temp.png"))#/home/pi/html/
    plant_stat_panel.config(image = plant_stat_img)
    plant_stat_panel.image = plant_stat_img
    root.after(10000, img_updater)

img_updater()
root.mainloop() 

一旦覆盖旧图像,python垃圾收集器就会自动释放内存。在python中,您不必担心内存分配。