簡體   English   中英

如何讓計時器顯示秒數?

[英]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()

所以我們可以做一些事情來改善這一點。

  1. 我們可以使用strftime來格式化時間,而不是嘗試使用 if 語句來管理格式。 這可以用於說天、小時、分鍾、秒等,但現在我們只需要秒。

  2. 您想避免whilesleep()與 tkinter 在同一線程中。 這是因為這 2 種方法將阻塞主循環,因此您將永遠不會看到顯示的時間,並且只有在 while 循環和睡眠完成后才能看到GAME OVER ,因為它們都阻塞了主循環。

  3. 將您的導入寫在新行上,並使用import tkinter as tk而不是* 這將有助於防止覆蓋任何內容。

  4. 我們可以刪除您的功能之一,因為它是不需要的額外步驟。

  5. 要在 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.

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