Ich lehre mich seit ein paar Monaten selbst Python und habe jetzt einige GUI-Techniken gelernt.Python tkinter .pack/.pack_forget Speicherproblem
Ich schrieb dieses einfache Skript basierend auf einem pack_remove Beispiel, das ich in einem Buch gefunden habe. Mein Skript zeigt einfach lokale und UTC-Zeit jede Sekunde an. Zugegeben, der einzige Unterschied ist die Stunde, ich möchte trotzdem jede Sekunde neu anzeigen.
Das Skript funktioniert, aber mein RAM steigt ständig mit jeder Zeitanzeige. Ich beginne mit ungefähr 4 MB, dann nach 2 Stunden oder so verwendet das Skript 25 MB. Das macht für mich einen Sinn, aber ich war neugierig, ob es eine Möglichkeit gibt, jede Sekunde neue Zeiten anzuzeigen, aber den Speicherverbrauch einer solchen einfachen Uhranzeige zu reduzieren.
Oder verwende ich eine ineffiziente Technik, um Daten in einer GUI mit einer hohen Frequenz wieder anzuzeigen?
Hier ist mein Code:
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()
Vielen Dank im Voraus
streng genommen müssen Sie keine 'textvariable' verwenden. Das bedeutet zusätzlichen Aufwand, wenn Sie nur das Textattribut neu konfigurieren müssen. –