2017-08-05 3 views
1

Ich habe ein Fenster und ich rendere ein Bild darauf. Bei jedem Bild ändert sich die Position. Das Problem ist also, dass es (offensichtlich) nicht vom letzten Bild verschwindet. Ich möchte das Fenster jedes Bild löschen. Ich finde nirgendwo klare Methoden für das Fensterobjekt (GraphWin). Und ich kann nicht undraw() verwenden, denn dann müsste ich es für alles auf dem Bildschirm tun.Graphics.py: Wie wird das Fenster gelöscht?

+0

Sie müssen etwas für alles im Fenster tun. Da 'GraphWin' jedoch eine Unterklasse eines' Tkinter.canvas'-Widgets ist, bedeutet dies, dass es 'find_all()' und 'delete()' Methoden hat, da 'GraphWin' diese nicht überschreibt (aus der Quelle des Moduls)). Ersteres gibt eine Liste aller Objekt-ID-Nummern auf der Zeichenfläche zurück. Sie können dann diese Nummern in der Liste durchlaufen und die Methode 'delete()' aufrufen. – martineau

Antwort

1

Die erste Sache zu betrachten ist, wenn Sie Grafikobjekte einfach zwischen Rahmen bewegen, dann rufen Sie ihre move() Methoden auf, anstatt sie zu löschen und neu zu zeichnen. Wenn Sie den Bildschirm löschen müssen, schlage ich vor:

Bevor ich auf den Tkinter-Level herabsetze, würde ich in Erwägung ziehen, die eigenen Grundlagen von Zelle Graphics zu verwenden. Der Grund dafür ist, dass die Zelle Graphics ihre eigenen parallelen Datensätze von Objekten behält und wenn Sie sie von der Tkinter-Ebene löschen, könnten Sie die beiden nicht synchronisieren. Hier ist mein Vorschlag:

Allerdings ist nicht zeichnen Elemente langsam, wahrscheinlich langsamer als die gewünschte Bildrate. Also, sollten Sie die automatische Spülung deaktivieren:

win = GraphWin(..., autoflush=False) 

und dann rufen:

update() 

, wenn Sie etwas zu Ihrem Benutzer zu präsentieren - das ist die Grafik beschleunigen wird, da sie gewonnen Zeige alle Zwischenschritte.

Der obige Hinweis gilt nicht gelten jedoch für Dinge, die mit der win.plot() Methode gezogen werden. Das Plotten wird auf einer niedrigeren Ebene als bei anderen Zelle-Grafiken durchgeführt, so dass Sie zum Löschen der Darstellung auf Tkinter zurückgreifen müssen. Ein Beispiel finden Sie in How to undraw plot with Zelle graphics? .

Verwandte Themen