Animation abspielenn

Fragen zu Tkinter.
Antworten
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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....
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.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du darfst auch nicht beim einem Aufruf von "starten2" alle Bilder anzuzeigen. Bei jedem Aufruf musst du das nächste anzeigen.
Das Leben ist wie ein Tennisball.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

:oops:

überarbeitet, aber geht immer noch nicht

http://paste.pocoo.org/show/152837/
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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 ...
jtk
User
Beiträge: 37
Registriert: Montag 19. November 2007, 17:16

mal ne ganz andere frage:

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

(dazu is ein button übehaupt da)
jtk
User
Beiträge: 37
Registriert: Montag 19. November 2007, 17:16

und beim startbutton halt das gleiche...

das argument e kannst du dann weglassen, das war ja sowieso nur patzhalter.
def starten2(frame=0):
...
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Danke, das hatte ich gemeint.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

danke, das funktioniert zwar,

allerdings würde ich gerne noch rauskriegen, wo der Fehler in meinem Programm liegt.
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.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

danke, endlich funktioniert´s :D

ich werde den code noch verbessern und ihn dann posten.
Antworten