Leck bei der Aktualisierung des Etiketts

Ich bin neu in tkinter und habe ein Gedächtnisleck in einem Projekt verfolgt, das ich bis zu einer Uhr in meinem Code mache. Es stellt sich heraus, das Gedächtnisleck passiert, wenn die Aktualisierung eines Labels, das einfachste Beispiel, das ich habe es unten in Code ist:

import Tkinter as tk class Display: def __init__(self, master): self.master = master self.tick() def tick(self): self.label = tk.Label(self.master, text = 'a') self.label.place(x=0,y=0) self.master.after(50, self.tick) root = tk.Tk() disp = Display(root) 

Wenn jemand mir sagen könnte, warum das Gedächtnis leckt, wäre ich dankbar.

Danke, Matt

2 Solutions collect form web for “Leck bei der Aktualisierung des Etiketts”

Das Problem scheint zu sein, dass Sie Etiketten erstellen, ohne sie zu zerstören. Jedes Mal, wenn du ein neues Etikett kreisst und es über das alte platzierst, so wird es immer noch referenziert und kann daher kein Müll gesammelt werden.

Hier ist eine leicht überarbeitete Version, die nicht leckt ….

 import Tkinter as tk class Display: def __init__(self, master): self.label = None self.master = master self.tick() def tick(self): if self.label: self.label.destroy() self.label = tk.Label(self.master, text = 'a') self.label.place(x=0,y=0) self.master.after(50, self.tick) root = tk.Tk() disp = Display(root) 

Das Problem ist, dass das tick neue Etiketten erstellt. Es gibt keinen Grund, mehr als ein Etikett in einer Schleife wie dieses zu schaffen, es sei denn, du brauchst wirklich eine immer größere Anzahl von Etiketten. Sie können den Text eines Label-Widget mithilfe der configure Methode aktualisieren.

Beispielsweise:

 def tick(self): self.label.configure(text=`my new text`) self.after(50, self.tick) 
  • Maximale Rekursionstiefe überschritten beim Aufruf eines Pythonobjekts
  • Tkinter zur Anzeige der Bilder
  • Setzen Sie den markierten Text mit den Tags fett
  • Tkinter sperrt python, wenn Icon geladen und tk.mainloop in einem Thread
  • Tkinter auf Leinwand Größe ändern Bildlaufleiste nicht einstellen
  • Pyinstaller zeigt keine Bilder und Ikone
  • Python / Tkinter: Trap Textauswahl über Tastatur / Maus als Event?
  • Wie kann ich ein Programm innerhalb eines Tkinter-Frames ausführen?
  • Speicher leckt, wenn das Bild in Python verworfen ist
  • ImportError: Kein Modul namens PIL beim Öffnen der .py-Datei direkt in Windows
  • Ausgabe mit tkinter, python und seaborn: _tkinter.TclError: kein Anzeigename und keine $ DISPLAY Umgebungsvariable
  • Python ist die beste Programmiersprache der Welt.