Python tkinter .pack / .pack_forget内存问题
发布时间:2020-12-20 13:27:09 所属栏目:Python 来源:网络整理
导读:我几个月来一直在教自己 Python,并开始学习一些GUI技术. 我根据我在书中找到的pack_remove示例编写了这个简单的脚本.我的脚本每秒只显示本地和UTC时间.当然唯一的区别是小时,我仍然希望每秒重新显示一次. 该脚本有效,但每次显示时我的RAM都在不断增加.我开始
我几个月来一直在教自己
Python,并开始学习一些GUI技术.
我根据我在书中找到的pack_remove示例编写了这个简单的脚本.我的脚本每秒只显示本地和UTC时间.当然唯一的区别是小时,我仍然希望每秒重新显示一次. 该脚本有效,但每次显示时我的RAM都在不断增加.我开始时大约4mb然后2小时后脚本使用25mb.这对我来说是有意义的,但我很好奇是否有一种方法每秒显示新的时间,但减少这种简单时钟显示的内存使用. 或者我使用效率低下的技术以高频率在GUI中重新显示数据? 这是我的代码: from tkinter import * import time class TimeDisplay(Frame): def __init__(self,msecs = 1000): Frame.__init__(self) self.msecs = msecs self.pack() utc_time = Label(self,text='') utc_time.pack() cst_time = Label(self,text='') cst_time.pack() self.utc_time = utc_time self.cst_time = cst_time self.repeater() def repeater(self): self.utc_time.pack_forget() self.cst_time.pack_forget() self.utc_time = Label(self,text= 'UTC: ' + time.strftime('%Y/%m/%d %H:%M:%S',time.gmtime())) self.utc_time.pack() self.utc_time.config(bg='navy',fg='white') self.cst_time = Label(self,text= 'CST: ' + time.strftime('%Y/%m/%d %H:%M:%S',time.localtime())) self.cst_time.pack() self.cst_time.config(bg='navy',fg='white') self.after(self.msecs,self.repeater) if __name__ == '__main__': TimeDisplay(msecs=1000).mainloop() 提前致谢 解决方法
pack_forget不会破坏任何东西,它只是使它不可见.这是内存泄漏的GUI版本 – 您不断创建对象而不会破坏它们.
所以,要学习的第一课是你应该在完成它时销毁它. 要学习的更重要的一课是,您不必一遍又一遍地破坏和重新创建相同的小部件.您可以更改使用configure方法显示的文本.例如: self.utc_time.configure(text="...") 这将使您的程序不使用任何额外的内存,甚至使用(不知不觉)更少的CPU. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |