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

2024-09-28 20:51:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    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)

以下是animator函数:

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玩我的代码


Tags: 函数in文本fordatadefstdoutrange
1条回答
网友
1楼 · 发布于 2024-09-28 20:51:12

写入后调用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)

相关问题 更多 >