@Dmitry01

Вопрос, почему питон в цикле While не отрисовывает объекты?

задача:реализовать анимацию перемещения круга.
from tkinter import *
import time 

root = Tk()

canvas = Canvas(root,width=1000,height=500)
x=0
y=0
canvas.create_oval(x,y,x+10,y+10)
start_time = time.time()
sec = 10
while (time.time()-start_time) <= sec:
	canvas.delete('all')
	x=20*(time.time()-start_time)
	y=30*(time.time()-start_time)
	canvas.create_oval(x,y,x+10,y+10)

canvas.pack()
root.mainloop()

но,когда запускаю скрипт ничего не происходит 10 секунд, а потом появляется результат в виде окна и круга в конечной точке x=200,y=300 но самой анимации не было, в чем может быть проблема?
  • Вопрос задан
  • 804 просмотра
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Потому что обработка всех событий в оконном приложении, в том числе перерисовка окна, происходит в event loop. Вы своим циклом его "останавливаете".
Ответ написан
Попробуйте добавить обновление холста canvas.update()

from tkinter import *
import time

root = Tk()

canvas = Canvas(root,width=1000,height=500)
x=0
y=0
canvas.create_oval(x,y,x+10,y+10)
canvas.pack()
start_time = time.time()
sec = 10
while (time.time()-start_time) <= sec:
canvas.delete('all')
x=20*(time.time()-start_time)
y=30*(time.time()-start_time)
canvas.create_oval(x,y,x+10,y+10)
canvas.update()

root.mainloop()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы