在现代快节奏的工作和生活中,时间管理变得越来越重要。一个简单易用的倒计时工具可以帮助我们更好地掌控时间,提高工作效率。本文将介绍如何使用Python的Tkinter库创建一个功能完整的桌面倒计时工具。
功能概述
这个倒计时工具具有以下核心功能:
- 自定义时间设置:支持小时、分钟、秒的精确设置
- 预设时间快捷按钮:一键设置常用时间间隔(5分钟、10分钟等)
- 倒计时显示:清晰展示剩余时间
- 控制功能:开始、暂停、重置和停止操作
- 提醒功能:倒计时结束时发出声音提示和弹窗提醒
- 视觉效果:最后10秒变为红色警示
代码实现详解
1. 导入必要的库
import threading
import time
import tkinter as tk
from tkinter import ttk, messagebox
import winsound
我们使用threading模块来创建后台线程运行倒计时,避免阻塞GUI主线程。winsound用于在倒计时结束时发出提示音。
2. 创建主应用程序类
class CountdownTimer:
def __init__(self, root):
self.root = root
self.root.title("电脑倒计时工具")
self.root.geometry("500x400")
self.root.resizable(False, False)
self.root.configure(bg="#f0f0f0")
# 初始化状态变量
self.remaining_seconds = 0
self.is_running = False
self.is_paused = False
self.stop_flag = False
# 设置默认时间
self.reset_timer()
# 窗口关闭事件处理
self.root.protocol("WM_DELETE_WINDOW", self.on_closing)
3. 设计用户界面
我们使用Tkinter的ttk模块创建现代化样式的界面:
# 创建样式
self.style = ttk.Style()
self.style.configure("TFrame", background="#f0f0f0")
self.style.configure("TButton", font=("微软雅黑", 10), padding=5)
self.style.configure("TLabel", background="#f0f0f0", font=("微软雅黑", 12))
self.style.configure("Bold.TLabel", font=("微软雅黑", 12, "bold"))
self.style.configure("Timer.TLabel", font=("Arial", 36, "bold"), foreground="#2c3e50")
self.style.configure("Title.TLabel", font=("微软雅黑", 16, "bold"), foreground="#3498db")
界面包含以下几个主要部分:
- 标题区域
- 时间设置区域(小时、分钟、秒)
- 预设时间按钮区域
- 倒计时显示区域
- 控制按钮区域
4. 核心功能实现
时间设置与显示
def set_time(self, hours, minutes, seconds):
"""设置倒计时时间"""
self.hour_var.set(str(hours))
self.min_var.set(str(minutes))
self.sec_var.set(str(seconds))
self.update_timer_display()
def update_timer_display(self):
"""更新倒计时显示"""
hours = int(self.hour_var.get())
minutes = int(self.min_var.get())
seconds = int(self.sec_var.get())
self.remaining_seconds = hours * 3600 + minutes * 60 + seconds
self.display_time(self.remaining_seconds)
def display_time(self, seconds):
"""格式化显示时间"""
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
self.timer_var.set(f"{hours:02d}:{minutes:02d}:{seconds:02d}")
倒计时逻辑
def start_timer(self):
"""开始倒计时"""
if not self.is_running:
self.update_timer_display()
if self.remaining_seconds <= 0:
messagebox.showwarning("提示", "倒计时时间不能为零!")
return
self.is_running = True
self.is_paused = False
self.stop_flag = False
# 更新按钮状态
self.start_btn.config(state=tk.DISABLED)
self.pause_btn.config(state=tk.NORMAL)
self.stop_btn.config(state=tk.NORMAL)
# 创建倒计时线程
threading.Thread(target=self.run_timer, daemon=True).start()
def run_timer(self):
"""运行倒计时"""
while self.remaining_seconds > 0 and not self.stop_flag:
if not self.is_paused:
self.display_time(self.remaining_seconds)
self.remaining_seconds -= 1
# 最后10秒变为红色
if self.remaining_seconds < 10:
self.timer_frame.configure(style="Alert.TFrame")
self.style.configure("Alert.TFrame", background="#ffdddd")
self.style.configure("Timer.TLabel", foreground="#e74c3c")
time.sleep(1)
if self.remaining_seconds <= 0 and not self.stop_flag:
# 倒计时结束
self.timer_complete()
控制功能
def pause_timer(self):
"""暂停/继续倒计时"""
self.is_paused = not self.is_paused
if self.is_paused:
self.pause_btn.config(text="继续")
else:
self.pause_btn.config(text="暂停")
def reset_timer(self):
"""重置倒计时"""
self.stop_timer()
self.update_timer_display()
self.style.configure("Timer.TLabel", foreground="#2c3e50")
self.timer_frame.configure(style="TFrame")
def stop_timer(self):
"""停止倒计时"""
self.stop_flag = True
self.is_running = False
self.is_paused = False
# 更新按钮状态
self.start_btn.config(state=tk.NORMAL)
self.pause_btn.config(text="暂停", state=tk.DISABLED)
self.stop_btn.config(state=tk.DISABLED)
完成提醒
def timer_complete(self):
"""倒计时完成处理"""
self.stop_timer()
# 播放提示音
for _ in range(3):
winsound.Beep(1000, 500) # 频率1000Hz,持续500ms
time.sleep(0.3)
# 显示完成消息
messagebox.showinfo("倒计时结束", "时间到!倒计时已完成!\n\n点击确定关闭提示")
# 重置样式
self.style.configure("Timer.TLabel", foreground="#2c3e50")
self.timer_frame.configure(style="TFrame")
使用指南
- 设置时间:通过小时、分钟、秒的微调框设置所需时间,或使用预设按钮
- 开始倒计时:点击"开始倒计时"按钮
- 控制倒计时:可以使用暂停/继续、重置或停止按钮控制倒计时
- 完成提醒:倒计时结束时,程序会发出声音提示并显示提示窗口
最终效果

2039

被折叠的 条评论
为什么被折叠?



