当应该单独显示时,代码一次显示所有帧

Code shows all the frames at once when supposed to show separately

有密码。我想创建一个文字动画。它打印一行文本,然后在延迟一段时间后将其擦除并打印另一行。 这是创建文本框的函数:

    def frame(data):
    clear = '\u001b[0m'

    for letter in data:
        rslt = colours['fg'][letter['color']]
        rslt += letter.get('bg', '')
        rslt += letter['letter']
        rslt += clear
        stdout.write(rslt)

这是动画函数:

from time import sleep

def animate(data):
    clear = '\u001b[100D'
    #for i in range(len(data)):
    for i in range(5):
        #stdout.write(clear) #1
        ready = change(data, i)
        frame(ready)
        sleep(0.4)
    print()

我应该得到什么? 正如我上面解释的,它应该打印一行文本,然后等待 0.4,然后在下一个迭代周期中擦除之前的文本, 然后重复这些内容。

但是我得到了什么?我什么也没得到(我没有准确测量,但可能是0.4的延迟总和)一段时间然后文本重复5次它没有被清除,因为第 1 行被注释了。如果不是,再次计算延迟总和后,我得到文本的最后一帧。

你可以在 https://repl.it/repls/PunyGlassApplicationserver

上玩我的代码

写入后调用stdout.flush()

def animate(data):
    clear = '\u001b[100D'
    #for i in range(len(data)):
    for i in range(5):
        #stdout.write(clear) #1
        ready = change(data, i)
        frame(ready)
        stdout.flush()
        sleep(0.4)