我有一个要在主页面上显示的图像,我每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()
答案 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中,您不必担心内存分配。