2016-09-30 105 views
0

我有一個裝載功能:如何在函數運行時在Python中顯示動畫?

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大SQL查詢)。 或者我該如何製作其他加載動畫?

在此先感謝帕特里克!

回答

0

首先我不會用system("cls")可言:它清除屏幕時,它可能是有趣的,仍然可以看到寫着什麼。我只是預先編制\rwordstr

然後要讓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 
+0

非常感謝!真的有幫助!對於其他所有人:您需要在文件頂部添加「導入線程」。並用你的var OR字符串替換「ev = start_anim(loadingtext)」'loadingtext'! :) – Patrick

相關問題