[英]How can I make a timer display seconds?
我讀到可以使用 time.sleep() 制作倒數計時器。 這是我的嘗試。 我可以將秒數打印到空閑狀態,但不能打印到 Tkinter 窗口。 它周圍有黑客嗎?
import time; from tkinter import *
sec = 11
def start(timer):
print(countDown(sec,timer))
def countDown(sec,timer):
while sec >= 0:
print(sec)
if sec > 9:
timer.configure(text = str(sec)) #'two digits'
elif sec > 0:
timer.configure(text = '0'+str(sec)) #'one digit'
else:
timer.configure(text = 'GAME OVER!')
sec -= 1
time.sleep(1)
win = Tk()
win.configure(bg='black')
header = Label(win, text="Game Timer", fg='blue', bg='black', font=('Arial Bold',14))
header.pack()
timer = Label(win, relief=SUNKEN, fg='white', bg='black', font=('Arial',14))
timer.pack(fill=BOTH, expand=1)
btn = Button(win,text='Start', command= lambda: start(timer))
btn.pack()
win.mainloop()
所以我們可以做一些事情來改善這一點。
我們可以使用strftime
來格式化時間,而不是嘗試使用 if 語句來管理格式。 這可以用於說天、小時、分鍾、秒等,但現在我們只需要秒。
您想避免while
和sleep()
與 tkinter 在同一線程中。 這是因為這 2 種方法將阻塞主循環,因此您將永遠不會看到顯示的時間,並且只有在 while 循環和睡眠完成后才能看到GAME OVER
,因為它們都阻塞了主循環。
將您的導入寫在新行上,並使用import tkinter as tk
而不是*
。 這將有助於防止覆蓋任何內容。
我們可以刪除您的功能之一,因為它是不需要的額外步驟。
要在 tkinter 中管理定時循環,我們可以使用after()
。
嘗試這個:
import tkinter as tk
import time
def count_down(sec):
if sec > 0:
timer.configure(text=time.strftime('%S', time.gmtime(sec)))
win.after(1000, lambda: count_down(sec-1))
else:
timer.configure(text='GAME OVER!')
win = tk.Tk()
win.configure(bg='black')
sec = 11
header = tk.Label(win, text="Game Timer", fg='blue', bg='black', font=('Arial Bold', 14))
timer = tk.Label(win, relief='sunken', fg='white', bg='black', font=('Arial', 14))
btn = tk.Button(win, text='Start', command=lambda: count_down(sec))
header.pack()
timer.pack(fill='both', expand=1)
btn.pack()
win.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.