簡體   English   中英

為什么當我調用 root.after() 方法時 TKinter 凍結?

[英]Why is TKinter freezing when I call the root.after() method?

我正在嘗試用 DK 的 Python 項目書制作一個可愛的屏幕寵物。 目前,它可能看起來快樂、悲傷和厚顏無恥,但我希望它玩球。

每次我調用它都會凍結,所以我搜索了它。 我發現我應該將 c.move 的參數用作 root.after() 的單獨參數,但這不起作用。 它第一次成功,但拋出錯誤。 該錯誤表明沒有“狀態”之類的東西。

這是我的代碼:

def play():     
   c.itemconfigure(ball, state=NORMAL)     
   root.after(1000, c.move(ball, 250, 390))      
   root.after(1000, c.move,ball, 150, 390)
   root.after(1000, c.move,ball, 250, 390)
   root.after(1000, c.move,ball, 150, 390)
   root.after(1000, c.itemconfigure,ball, state=HIDDEN) play = Button(root, text="Play!", 
   command=play, bg='green') play = Button(root, text="Play!", command=play, bg='green')
play = Button(root, text="Play!", command=play, bg='green')

如果你想查看整個代碼,這里是: https://replit.com/@EmmaGao8/Screen-Pet#main.py

這是重復的。 在詢問 stackoverflow 之前,我詢問了 reddit.com。 我沒有得到任何答案,所以我不得不再問一次。

我究竟做錯了什么?

這個:

   root.after(1000, c.move(ball, 250, 390))      
   root.after(1000, c.move,ball, 150, 390)

應該變成這樣:

def move(c, ball,a,b):
    c.move(ball, a, b)

   root.after(1000, lambda: move(c, ball, 250, 390))      
   root.after(2000, lambda: move(c,ball, 250, 390))      

您的代碼中有兩個問題:

  1. root.after時間對於您的所有語句都是相同的,例如,我將 1000 用於第一個語句,將 2000 用於第二個語句。
  2. 你立即調用c.move而不是指示root.after調用你的 function,一個lambda解決了這個問題。

暫無
暫無

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

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