Ich arbeite derzeit an einem meiner ersten Python-Projekte, dem Conway's Game of Life in tkinter
. Mein aktuelles Design sollte Zellen (dargestellt durch eine Klasse) auf einem vordefinierten Raster zeichnen. Die Regeln sowie die GUI funktionieren und ich bin bereit, den Code zu erweitern. Insgesamt gibt es 3 Klassen:
Es gibt jedoch noch ein letztes großes Problem: Mein Code zeichnet wahrscheinlich jedes Mal, wenn ich meine after
Schleife ausführe, neue tote oder lebende Zellen auf die Zeichenfläche, was mein Programm innerhalb weniger Zyklen fast bis zum Stillstand verlangsamt. Wenn ich versuche, es an irgendeinem Punkt während der Schleife mit zu zerstören self.canvas.destroy(cell)
, ruft es sofort die __del__
Methode der Zelle auf und das Gitter wird überhaupt nicht gezeichnet.
Ich hoffe, dass der unten angegebene Code ausreicht, um mein Problem zu verstehen. Die isAlive()
Methode prüft, ob die Zelle in der nächsten Iteration am Leben sein soll. drawGrid()
, ist glaube ich selbsterklärend.
Vielen Dank für jede Hilfe und liebe Grüße,
Chris
def play(self):
self.isAlive()
self.drawGrid()
self.root.after(self.speed, self.play)
auch der Fehler, der beim Schließen des root
Fensters ausgegeben wird:
invalid command name "2702053988288play"
while executing
"2702053988288play"
("after" script)
Lösung des Problems
Wenn Sie ein Objekt von einer Leinwand löschen möchten, verwenden Sie delete
statt destroy
. Angenommen, cell
dies ist die ID eines oder mehrerer Canvas-Elemente, würde es wie folgt aussehen.
self.canvas.delete(cell)
Keine Kommentare:
Kommentar veröffentlichen