簡體   English   中英

如何讓這個計時器正確倒計時?

[英]How do I get this timer to count down properly?

我正在嘗試制作一個簡單的 gui,您可以在其中按下按鈕啟動計時器,並看到它倒計時,類似於https://web.5217.app/ ,但我無法讓計時器顯示在 gui 中,任何幫助,將不勝感激。

這也是我的第一個問題,所以我可能做錯了什么。

from tkinter import Tk, Button, DISABLED, Label, ACTIVE
import time

#main window configuration
root = Tk()
root.title ("PyDoro")
root.geometry ("400x400")
root.configure(bg = "#383838") 

#colours for the text
Colour1 = "#c4c4c4"
Colour2 = "#292828"

def Date(): #Defines the date for displaying under the clock
    day = time.strftime("%d")
    month = time.strftime("%b") # %B can be used for full month
    year = time.strftime("%Y")

    Calendar.config (text= day + " " + month + " " + year)

def clock(): # for creating the clock
    tizo = time.strftime("%X") #Find the time for your locale
    Time.config (text = tizo)
    Time.after (1000, clock)
    Date() #calling the Date because it makes sense to do it here

def Stop():
    print ("nothing")

def Start():
    time_left = (50)
    Stop.config (state = ACTIVE)
    timer = Label (root, text = time_left)
    timer.pack()

    for i in range (50):
        timer.config (text = time_left)
        Start.after (1000) # this waits for 1 minute (60000 miliseconds)
        #print (i) # This is just for debugging
        time_left = time_left - 1 
        print (time_left)
        




Start = Button (root, text = "Start!", fg = Colour1, bg = Colour2, padx = 40, command = Start)
Stop = Button (root, text = "stop", fg = Colour1, bg = Colour2, state = DISABLED)



Time = Label (root, text="", font = ("Helvetica", 50), fg = Colour1, bg = "#383838")
Time.pack (pady = 5)

Calendar = Label (root, font = ("Helvetica", 12), fg = Colour1, bg = "#383838")
Calendar.pack (pady = 5)

Start.pack (pady = 10)

Stop.pack (pady = 10)


clock()
root.mainloop() #Runs the program

將您的Start() function 替換為以下代碼:

def Start():
    time_left = (50)
    Stop.config (state = ACTIVE)
    timer = Label (root, text = time_left)
    timer.pack()
    def update(time_left):
        timer['text'] = time_left
        if time_left > 0:
            root.after(1000, update, time_left-1)
    update(time_left)

創建 label 后,程序會調用名為 update 的 function,它將計時器 label 的文本設置為time_left 如果time_left大於 0,它將調用root.after ,並將time_left -1傳遞回更新 function。 這將使計時器倒計時,直到達到 0。

沒有顯示計時器Label的原因是因為顯示器從未有機會更新。 要解決此問題,請嘗試使用Start() function 如下所示,它調用通用小部件方法update_idletasks()在更改后對其進行更新。

def Start():
    time_left = 50
    Stop.config(state=ACTIVE)
    timer = Label(root, text=time_left)
    timer.pack()

    for i in range(50):
        timer.config(text=time_left)
        time_left -= 1
        root.update_idletasks()  # Update display.
        root.after(1000)  # Pause for 1000 milliseconds (1 second).

暫無
暫無

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

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