嘿,伙計們,我在 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在幾分之一秒內
uj5u.com熱心網友回復:
該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()
uj5u.com熱心網友回復:
.afterfunction 有兩個引數,第一個是以毫秒為單位的時間,即 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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/530278.html
