所以我試圖在 tkinter 上制作一個從 03:00 開始到 00:00 結束的倒計時計數器,每秒主動更新。起初我用 time.sleep() 使用了一個 while 回圈,但它凍結了我的 tkinter,所以我嘗試使用 tkinter after() 方法但沒有任何成功。我想要做的是從 03:00 分鐘開始計時器,下降 - 02:59, 02:58, 02:57,....,00:00 計時器使用 tk 表示。 StringVar 并且應該在 tkinter 視窗打開時啟動
我寫的這段代碼引發了最大遞回深度例外:
class BoggleGUI:
def __init__(self):
self.root = tk.Tk()
self.root.title("Boggle Game")
self.root.resizable(False, False)
self.__sec = tk.StringVar()
self.__sec_entry = tk.Entry(self.root, textvariable=self.__sec,
width=2, font="Helvetica 14")
self.__sec_entry.place(x=220, y=12.5)
self.__sec.set("00")
self.__mins = tk.StringVar()
self.__mins_entry = tk.Entry(self.root, textvariable=self.__mins,
width=2, font="Helvetica 14")
self.__mins_entry.place(x=190, y=12.5)
self.__mins.set("03")
self.countdown_timer()
def countdown_timer(self):
times = int(self.__mins.get()) * 60 int(self.__sec.get())
if times > -1:
minute, second = divmod(times, 60)
self.__mins.set("{0:2d}".format(minute))
self.__sec.set("{0:2d}".format(second))
self.root.update()
if times == 0:
self.__sec.set('00')
self.__mins.set('00')
times -= 1
self.root.after(1000, self.countdown_timer)
uj5u.com熱心網友回復:
您需要移動時間 =- 1 以上:
minute, second = divmod(times, 60)
self.__mins.set("{0:2d}".format(minute))
self.__sec.set("{0:2d}".format(second))
否則不會更新時間并重新調整 self.root.after(1000, self.countdown_timer)
將函式更改為此,它將起作用:
def countdown_timer(self):
times = int(self.__mins.get()) * 60 int(self.__sec.get())
if times > 0:
times -= 1
minute, second = divmod(times, 60)
self.__mins.set("{0:2d}".format(minute))
self.__sec.set("{0:2d}".format(second))
self.root.update()
if times == 0:
self.__sec.set('00')
self.__mins.set('00')
self.root.after(1000, self.countdown_timer)
我已編輯的回應,也改變if times > -1:以if times > 0:用于當它達到零,否則為負。
uj5u.com熱心網友回復:
您還可以使用執行緒庫。并使用 sleep 方法創建計時器功能并使用后
threading.Thread(target=timer).start()
您可以在庫檔案中閱讀更多內容。
uj5u.com熱心網友回復:
也許嘗試將遞回限制設定為更高的限制(默認設定為 1000)。
import sys
sys.setrecursionlimit(your_limit)
讓我知道這個解決方案是否可以停止。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400999.html
