倒计时工具

在现代快节奏的工作和生活中,时间管理变得越来越重要。一个简单易用的倒计时工具可以帮助我们更好地掌控时间,提高工作效率。本文将介绍如何使用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")

使用指南

  1. 设置时间:通过小时、分钟、秒的微调框设置所需时间,或使用预设按钮
  2. 开始倒计时:点击"开始倒计时"按钮
  3. 控制倒计时:可以使用暂停/继续、重置或停止按钮控制倒计时
  4. 完成提醒:倒计时结束时,程序会发出声音提示并显示提示窗口

最终效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焱童鞋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值