簡體   English   中英

Python tkinter time.sleep()

[英]Python tkinter time.sleep()

為什么我運行代碼時,它將首先休眠3秒鍾,然后執行'label'.lift()並更改文本? 這只是程序中許多功能之一。 我希望標簽讀取“ Starting in 3 ... 2 ... 1 ...”(開始於3 ... 2 ... 1 ...),並且數字在經過一秒鍾后發生變化。

def predraw(self):
    self.lost=False
    self.lossmessage.lower()
    self.countdown.lift()
    self.dx=20
    self.dy=0
    self.delay=200
    self.x=300
    self.y=300
    self.foodx=self.list[random.randint(0,29)]
    self.foody=self.list[random.randint(0,29)]
    self.fillcol='blue'
    self.canvas['bg']='white'
    self.lossmessage['text']='You lost! :('
    self.score['text']=0
    self.countdown['text']='Starting in...3'
    time.sleep(1)
    self.countdown['text']='Starting in...2'
    time.sleep(1)
    self.countdown['text']='Starting in...1'
    time.sleep(1)
    self.countdown.lower()
    self.drawsnake()

這樣做是因為窗口小部件中的更改僅在UI進入事件循環時才可見。 每次調用睡眠后,您都不允許屏幕更新,因此看來在更改任何內容之前,它正在睡眠三秒鍾。

一個簡單的解決方法是在調用self.update() time.sleep(1)之前立即調用self.update() ,盡管更好的解決方案是根本不調用sleep 您可以執行以下操作,例如:

self.after(1000, lambda: self.countdown.configure(text="Starting in...3"))
self.after(2000, lambda: self.countdown.configure(text="Starting in...2"))
self.after(3000, lambda: self.countdown.configure(text="Starting in...1"))
self.after(4000, self.drawsnake)

通過以這種方式使用after ,您的GUI可以在等待時間內保持響應狀態,而不必花很多時間來調用update

暫無
暫無

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

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