привет, ребята, у меня проблема, я делаю таймер в tkinter, но я не могу использовать time.sleep()
, поэтому я использую .after()
, и у меня новая проблема, я сделал запись, что хочу, чтобы номер записи был * 60, и после установленного времени текст будет быть написано, что говорит >> time is over!
, но тогда как эти 60 должны быть преобразованы в секунды? мой код:
from tkinter import *
from playsound import playsound
from time import sleep
import time
def jik():
a = int(text.get())
app.after(a * 600)
Label(app,text = "time is over").pack()
app = Tk()
app.minsize(300,300)
app.maxsize(300,300)
text = Entry(app,font=20)
text.pack()
Button(app,text = "start",command=jik).pack()
app.mainloop()
Например, если я нажму цифру 1, это >>time is over
за долю секунды
.after
функция принимает два аргумента, первый — это время в миллисекундах, то есть 1000 миллисекунд равны одной секунде, второй аргумент — это функция, которую нужно вызвать по истечении этого времени, просто определите, что делать по истечении времени в вторую функцию и используйте ее в качестве второго аргумента следующим образом.
from tkinter import *
from playsound import playsound
from time import sleep
import time
MILLISECOND_TO_SECOND = 1000
def jik():
a = int(text.get())
app.after(a * MILLISECOND_TO_SECOND, show_label)
def show_label():
Label(app,text = "time is over").pack()
app = Tk()
app.minsize(300,300)
app.maxsize(300,300)
text = Entry(app,font=20)
text.pack()
Button(app,text = "start",command=jik).pack()
app.mainloop()
Команда after
принимает ввод в миллисекундах, поэтому умножьте ее на 1000, чтобы преобразовать в секунды.
Кроме того, я только что сделал небольшой пример, который отображает обратный отсчет по мере того, как часы тикают:
# Usually it is a good idea to refrain from importing everything from the tkinter
# package, as to not pollute your namespace
import tkinter as tk
root = tk.Tk() # Customary to call your Tk object root
entry = tk.Entry(root)
entry.pack()
curtime = tk.Label(root)
curtime.pack()
is_running = False # Global variable to ensure we can't run two timers at once
def countdown(count):
global is_running
if count > 0:
curtime['text'] = f'{count:.2f}' # Update label
# Call the countdown function recursively until timer runs out
root.after(50, countdown, count-0.05)
else:
curtime['text'] = 'time is over'
is_running = False
def btn_press():
global is_running
if is_running:
return
cnt = int(entry.get())
is_running = True
countdown(cnt)
tk.Button(root, text='start', command=btn_press).pack()
root.minsize(300, 300)
root.maxsize(300, 300)
root.mainloop()
Обычно занимает миллисекунды. Я советую вам проверить, вводите ли вы в миллисекундах или в секундах