我一直在教自己Python幾個月,並開始學習一些GUI技術。Python tkinter .pack/.pack_forget內存問題
我寫了這個簡單的腳本,基於我在書中找到的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()
在此先感謝
嚴格來說,你不需要使用'textvariable'。這是額外的開銷,當你真正需要做的是重新配置文本屬性。 – 2012-03-27 22:18:07