2016-03-23 13 views
-1

neden olmaz Nasıl Doğru sonsuz ise kullanmaktan daha olumlu üzerine baktı gibi görünüyor: döngü . canvas.after() yöntemini ilk gördüğümde, "maksimum yineleme derinliği aşıldı" hatasına neden olması gerektiği gibi görünüyordu, ancak öyle değil. Neden? Hafızada tutulması gereken bir değer getirmediği için mi?Tkinter canvas.after() yöntemi bir ekran animasyon uygulamak için()</em> yöntemi Tkinter <em>canvas.after kullanarak kendi kendini yineleme hatası

+0

Neden böyle olacağını düşünüyorsunuz? Sadece arka planda bazı sihir yapar, böylece ana döngü fonksiyonu her seferinde sık sık işlevinizi çağırır. Neden kendini çağırmalı? – zondo

cevap

2

Yineleme değil, yineleme hatasına neden olmaz.

Tkinter, olayların bir sırasını korur. mainloop, her olayı sırasıyla ele alarak bu sıra boyunca yinelenmekten sorumludur. after'u aradığınızda, yinelemeli olarak bir işlevi çağırmıyorsunuz, sıraya yeni bir öğe ekliyorsunuz.

Örneğin, tkinter olay kuyruğunun açık bir liste olup olmadığını düşünün. Örneğin, bu sıraya Tkinter.event_queue adı verildiğini hayal edin. canvas.after(1000, my_function)'u yaptığınızda, kabaca Tkinter.event_queue.append((1000, my_function:) yapmakla eşdeğerdir. Ve, muhtemelen görebileceğiniz gibi, bir listeye ekleme, tekrarlama değildir.

+0

fonksiyonlar bu gibi yapılanmaya tüm görünmektedir: 'def() taşıyın: # ... koordinatlar x ayarlamak y root.after (50, taşıma)' En az ilk bakışta özyinelemeli görünüyor. –

+0

@PatrickDennis: bakabilir, ancak '(sonra)… 'neredeyse kelimenin tam anlamıyla sadece'()) 'dir. –