#python #tkinter #timer
#python #tkinter #таймер
Вопрос:
Я пытаюсь создать простой графический интерфейс, в котором вы можете нажать кнопку, чтобы запустить таймер, и посмотреть, как он отсчитывает время, подобно https://web.5217.app /, Но я не могу заставить таймер отображаться в графическом интерфейсе, буду признателен за любую помощь.
Также это мой первый вопрос, поэтому, возможно, я сделал что-то не так.
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
Ответ №1:
Замените вашу Start()
функцию следующим кодом:
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)
После создания метки программа вызывает функцию с именем update, которая устанавливает текст метки таймера time_left
равным . Затем он будет вызываться root.after
, если time_left
больше 0, и он переходит time_left -1
обратно в функцию обновления. Это приведет к обратному отсчету таймера до тех пор, пока он не достигнет 0.
Ответ №2:
Причина, по которой таймер Label
не отображается, заключается в том, что на дисплее никогда не предоставляется возможность обновления. Чтобы исправить это, попробуйте использовать Start()
функцию, показанную ниже, которая вызывает метод универсального виджета 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).