Seite 1 von 1

Animation abspielenn

Verfasst: Dienstag 24. November 2009, 20:59
von Pascal
Hallo Leute

Meine Idee war in einer Schleife auf ein Canvas die einzelnen Frames nacheinander abzubilden:

http://paste.pocoo.org/show/152708/


Leider funktioniert dies nicht.

immerhin habe ich es aber geschafft, einen bestimmten Frame abzubilden.
Sobald ich daraus allerdings eine Prozedur machen passiert einfach nichts mehr.
Ich gehen davon aus, das mein Problem irgendwo beim Verstehen von Tkinter liegt....

Verfasst: Dienstag 24. November 2009, 21:44
von BlackJack
@Pascal: Du darfst nicht versuchen die Animation in einer eigenen Schleife laufen zu lassen. Wenn Dein Code läuft, läuft ja logischerweise die Tkinter-Hauptschleife nicht, also kann die auch die GUI nicht aktualisieren. GUI-Toolkits übernehmen normalerweise die Programmflusskontrolle und rufen Deinen Quelltext nur bei bestimmten Ereignissen auf, zum Beispiel wenn eine Schaltfläche vom Anwender gedrückt wurde. Du darfst dann *kurz* was machen und musst die Kontrolle möglichst zügig wieder an die GUI-Bibliothek zurückgeben.

Wenn Du in zeitlichen Abständen etwas machen möchtest, zum Beispiel *ein* neues Bild aus der Sequenz anzeigen, dann kannst Du das mit der `after()`-Methode auf Widgets lösen.

Verfasst: Mittwoch 25. November 2009, 14:21
von Pascal
Mit after() hatte ich es auch schon probiert:

http://paste.pocoo.org/show/152823/

ich kann mir zwar die einzelnen frames anschauen. Aber sobald ich es über eine Prozedur versuche geht´s nicht mehr

Verfasst: Mittwoch 25. November 2009, 14:38
von EyDu
Du darfst auch nicht beim einem Aufruf von "starten2" alle Bilder anzuzeigen. Bei jedem Aufruf musst du das nächste anzeigen.

Verfasst: Mittwoch 25. November 2009, 14:55
von Pascal
:oops:

überarbeitet, aber geht immer noch nicht

http://paste.pocoo.org/show/152837/

Verfasst: Mittwoch 25. November 2009, 15:27
von numerix
Wenn ich mich recht erinnere, dann wurde hier im Forum schonmal ein Tkinter-Code gepostet, der genau das macht, was hier gesucht wird. Ich glaube es war eine Entwicklung von wuf und ich meine mich ebenfalls erinnern zu können, dass ich das seinerzeit getestet hätte und es hervorragend funktioniert hätte (das ist eigentlich immer so, wenn wuf etwas zeigt :D ). Kannst ja mal auf die Suche gehen ...

Verfasst: Mittwoch 25. November 2009, 17:18
von jtk
mal ne ganz andere frage:

ende = tk.Button(text="Beenden", command=beenden)
ende.pack()

(dazu is ein button übehaupt da)

Verfasst: Mittwoch 25. November 2009, 17:24
von jtk
und beim startbutton halt das gleiche...

das argument e kannst du dann weglassen, das war ja sowieso nur patzhalter.
def starten2(frame=0):
...

Verfasst: Mittwoch 25. November 2009, 20:02
von problembär

Verfasst: Mittwoch 25. November 2009, 20:30
von numerix
Danke, das hatte ich gemeint.

Verfasst: Mittwoch 25. November 2009, 21:13
von Pascal
danke, das funktioniert zwar,

allerdings würde ich gerne noch rauskriegen, wo der Fehler in meinem Programm liegt.

Verfasst: Mittwoch 25. November 2009, 22:27
von BlackJack
@Pascal: Beim Aufruf der `after()`-Methode musst Du die Funtkion übergeben, die nach der angegebenen Zeit aufgerufen werden soll und nicht die Funktion *aufrufen*. Zusätzliche Argumente kannst Du auch an `after()` übergeben.

Verfasst: Mittwoch 25. November 2009, 23:41
von Pascal
danke, endlich funktioniert´s :D

ich werde den code noch verbessern und ihn dann posten.