Рассмотрите этот код:
while position > e1current:
main.after(500,movRight)
Это так же, как если бы вы написали это так:
main.after(500,movRight)
main.after(500,movRight)
main.after(500,movRight)
...
Поскольку вызов main.after(500,movRight)
, вероятно, выполняется за миллисекунду или около тоговы ставите в очередь сотни или тысячи вызовов, которые все будут выполняться на 500 мс в будущем.
Другими словами, нет никакой разницы, чем если бы вы сделали это:
def something():
movRight()
movRight()
movRight()
...
main.after(500,something)
Правильный способ сделать анимацию - создать функцию, которая выполняет один кадр анимации, а затемперепланирует себя.
Например:
def moveController():
movRight()
e1current+=1
if position > e1current:
main.after(500, moveController)