体验地址
import tkinter as tk
from tkinter import messagebox
import time
import threading
def update_clock():
"""更新时钟显示"""
current_time = time.strftime("%H:%M:%S")
clock_label.config(text=current_time)
root.after(1000, update_clock) # 每秒更新一次
def start_timer():
"""启动定时器"""
try:
seconds = int(timer_entry.get())
if seconds <= 0:
raise ValueError("Time must be positive.")
messagebox.showinfo("Timer Started", f"Timer set for {seconds} seconds.")
def countdown():
"""倒计时函数"""
nonlocal seconds
while seconds > 0:
minutes, secs = divmod(seconds, 60)
timer_label.config(text=f"{minutes:02d}:{secs:02d}")
root.update()
time.sleep(1)
seconds -= 1
messagebox.showinfo("Timer Ended", "Time's up!")
# 在新线程中启动倒计时,避免阻塞GUI
threading.Thread(target=countdown).start()
except ValueError:
messagebox.showerror("Invalid Input", "Please enter a valid number of seconds.")
# 创建主窗口
root = tk.Tk()
root.title("Digital Clock with Timer")
# 创建时钟显示
clock_label = tk.Label(root, font=("Arial", 48), bg="black", fg="white")
clock_label.pack(fill=tk.BOTH, expand=1)
# 创建定时器输入框和按钮
timer_frame = tk.Frame(root)
timer_frame.pack(pady=10)
timer_label = tk.Label(timer_frame, text="00:00", font=("Arial", 24))
timer_label.pack(side=tk.LEFT)
timer_entry = tk.Entry(timer_frame, width=5)
timer_entry.pack(side=tk.LEFT)
timer_button = tk.Button(timer_frame, text="Start Timer", command=start_timer)
timer_button.pack(side=tk.LEFT)
# 启动时钟更新
update_clock()
# 运行主循环
root.mainloop()
这段代码使用tkinter库创建了一个带有数字时钟和定时器功能的GUI应用程序。
update_clock函数用于更新时钟的显示,通过调用time.strftime函数获取当前时间,并将其设置为时钟标签的文本。然后使用root.after方法安排下一秒再次调用update_clock函数,实现每秒更新一次时钟。
start_timer函数用于启动定时器。首先,它从定时器输入框中获取用户输入的秒数,并进行类型转换和合法性检查。如果输入无效(非正整数),则弹出错误消息框。否则,弹出确认消息框,告知用户定时器已设置为指定的秒数。
在start_timer函数内部定义了一个countdown内嵌函数,用于执行倒计时逻辑。倒计时过程中,通过divmod函数计算剩余时间的分钟和秒数,并将其格式化后设置为定时器标签的文本。然后使用root.update方法更新GUI界面,避免阻塞。接着调用time.sleep函数暂停1秒,再减去1秒的计时,直到剩余时间为0,倒计时结束。
start_timer函数使用threading.Thread创建一个新的线程,在该线程中执行countdown函数,以避免阻塞GUI界面的更新。
主程序创建了一个主窗口,并设置标题为"Digital Clock with Timer"。然后创建了一个时钟标签用于显示当前时间,以及一个定时器框架,包含一个定时器标签用于显示倒计时时间,一个输入框用于输入定时器的秒数,和一个按钮用于启动定时器。最后调用update_clock函数启动时钟更新,并运行主循环。