如何在功能工作时用Python显示动画?

时间:2016-09-30 08:03:25

标签: python function animation loading

我有一个加载功能:

def animation(loadingtext):
    word = list(loadingtext)
    for i in range(0,len(word)):
        os.system('cls')
        lower=word[i-1].lower()
        word[i-1]=lower

        caps=word[i].upper()    
        word[i]=caps

        wordstr=''.join(word)
        print(wordstr)
        time.sleep(0.3)

我希望在完成一些工作时显示该功能(例如fetcha big SQL-Query)。 或者我如何制作其他一些加载动画?

先谢谢帕特里克!

1 个答案:

答案 0 :(得分:0)

首先,我根本不会使用system("cls"):当看到写的内容可能会很有趣时,它会清除屏幕。我只会将\r添加到wordstr

然后让animation在完成其他工作时进行显示,您可以在第二个线程中重复调用它们等待某个事件,并在作业完成时设置该事件。

以下是可能的样子:

def animation(loadingtext):
    word = list(loadingtext)
    for i in range(0,len(word)):
        #os.system('cls')
        lower=word[i-1].lower()
        word[i-1]=lower
        caps=word[i].upper()
        word[i]=caps
        wordstr=''.join(word)
        sys.stdout.write('\r' + wordstr)
        time.sleep(0.3)

def start_anim(txt):
    ev = threading.Event()
    def _loop(ev, txt):
        while not ev.is_set():
            animation(txt)
    threading.Thread(target=_loop, args=(ev, txt)).start()
    return ev

然后你可以这样使用它:

ev = start_anim(loadingtext)
# heavy work - loadingtext is animated on screen
ev.set()   # stop the animation