Ich versuche eine Funktion zu implementieren, die ein animiertes Diagramm ausgibt.
Wenn ich simple_anim.py (aus Matplotlib-Beispielen) als Basis nehme:
%Vor%Effektiv funktioniert es.
ABER, wenn ich diesen Code innerhalb einer Funktion schließe (um veränderliche Parameter zur Verfügung zu stellen und eine explizite Datei für jeden möglichen Parameterwert zu vermeiden):
%Vor%und rufen Sie dann die Funktion, das Figurplot bleibt weiß. Tatsächlich kommt es nie dazu, in die Animationsfunktion einzutreten.
Ich weiß, dass mir einige Informationen fehlen und deshalb funktioniert es nicht. Kann mir jemand Hinweise geben?
Vielen Dank
Andrés
Der Grund dafür ist, dass die Timer und Callbacks, die das Fenster aktualisieren, Attribute des Objekts ani
sind. Wenn Sie keinen Verweis darauf haben, wird ani
in Garbage gesammelt und Ihre Timer / Callbacks verschwinden.
Die Lösung ist, dass Ihre Funktion ani
zurückgibt und in Ihrem Code eine Referenz darauf steht:
Dieses Problem (siehe github # 1656 ) wurde besprochen, aber nicht gelöst.
Wie die gute Antwort von tcaswell andeutet, ist das Verhalten des Problemcodes undefiniert, da er auf einem Objekt beruht, das gelöscht wurde und für die Garbage Collection verfügbar ist.
In der Praxis manifestiert sich dieses undefinierte Verhalten bei verschiedenen GUI-Backends unterschiedlich. Für einige Nutzer (zB diese "doppelte" Frage ), mit dem Wx-Backend in IDLE oder in der Standard-Pylab-Verknüpfung unter Windows scheint der undefinierte Code zu funktionieren (ich sage "scheint", weil es wirklich nicht funktioniert, sondern eher die gewünschten Ergebnisse durch Glück erzeugt). Wenn der Code in der Canopy-GUI mit seinem Standard-Qt-Backend ausgeführt wird, funktioniert der Code nicht. Qt und Wx haben sehr unterschiedliche Architekturen und Speicherbereinigung. (In Canopy kann das GUI-Backend auf der Registerkarte Python im Menü Einstellungen geändert werden; wenn es in Wx geändert wird, scheint auch der undefinierte Code zu funktionieren, aber das macht ihn nicht korrekt.)
Tags und Links python animation matplotlib