[英]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.