簡體   English   中英

Time.sleep()在循環內無法正常工作

[英]Time.sleep() not working properly inside a loop

這是一個非常簡單的問題,已經在我的標題中介紹過,下面是代碼:

def flash():
    import time
    for i in range(1,len(says)):
        label5.config(bg=says[i])
        time.sleep(1)

在這種情況下, time.sleep完全不執行任何操作,只是將程序延遲了幾秒鍾,然后僅顯示該函數的最終結果,並跳過了對我來說非常重要的整個過程。

Tkinter您應該使用after而不是sleep來調度函數以便以后執行(以毫秒為單位)。 在您的情況下,您可以嘗試這樣的操作。

def flash():
    for i in range(1,len(says)):
        label5.after(i*1000, lambda i=i: label5.config(bg=says[i]))

import tkinter as tk
says = ["white", "red", "green", "blue"]
root = tk.Tk()
label5 = tk.Button(root, text="Flashing label", command=flash)
label5.pack()
root.mainloop()

注意,這不會延遲循環本身的執行,而只是計划在將來的不同時間更新標簽。 如果循環內還有更多代碼需要與顏色變化同時發生,則還必須將其放入回調函數中,該函數當然也可以是常規def函數而不是lambda (關於lambda i=i :請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM