[Python]实现简单计时器应用

创建一个简单的计时器应用,使用Python的Tkinter库进行图形化界面设计。这个应用包括开始、暂停、重置等功能,可以设置一个倒计时并显示剩余时间。下面是代码实现的详细步骤。

1. 导入依赖库

首先,导入tkinter用于图形界面的构建,并且使用time模块来处理计时。

import tkinter as tk
from tkinter import messagebox
import time

2. 创建主应用类

将所有的逻辑都封装在一个类TimerApp中,并传入root窗口对象,作为应用的主窗口。

class TimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("计时器")

        # 初始化变量
        self.running = False  # 计时器是否正在运行
        self.time_left = 0  # 剩余时间
        self.start_time = 0  # 开始时间
        self.elapsed_time = 0  # 已经过的时间

        # 设置界面大小
        self.root.resizable(False, False)

3. 设计界面元素

接下来设计用户界面,包括显示时间的标签、时间输入框、按钮框架以及开始、暂停和重置按钮。

        # 显示时间的标签
        self.time_label = tk.Label(self.root, text="00:00", font=("宋体", 50), width=10, height=2)
        self.time_label.pack(pady=30)

        # 输入框,设置计时时间
        self.time_entry_label = tk.Label(self.root, text="设置时间 (秒):", font=("宋体", 12))
        self.time_entry_label.pack()

        self.time_entry = tk.Entry(self.root, font=("宋体", 14))
        self.time_entry.pack(pady=5)

        # 按钮框架
        self.buttons_frame = tk.Frame(self.root)
        self.buttons_frame.pack(pady=10)

        # 开始按钮
        self.start_button = tk.Button(self.buttons_frame, text="开始", font=("宋体", 14), width=10, command=self.start_timer)
        self.start_button.grid(row=0, column=0, padx=5, pady=5)

        # 暂停按钮
        self.pause_button = tk.Button(self.buttons_frame, text="暂停", font=("宋体", 14), width=10, command=self.pause_timer)
        self.pause_button.grid(row=0, column=1, padx=5, pady=5)

        # 重置按钮
        self.reset_button = tk.Button(self.buttons_frame, text="重置", font=("宋体", 14), width=10, command=self.reset_timer)
        self.reset_button.grid(row=0, column=2, padx=5, pady=5)

4. 实现计时器功能

  • 开始计时:当点击“开始”按钮时,程序会获取输入的秒数,并启动计时器。
  • 暂停计时:当点击“暂停”按钮时,计时器暂停,记录已过的时间。
  • 重置计时:当点击“重置”按钮时,计时器会被重置为初始状态。
    def start_timer(self):
        try:
            self.time_left = int(self.time_entry.get())  # 获取用户输入的时间
            if self.time_left <= 0:
                raise ValueError
        except ValueError:
            messagebox.showerror("输入错误", "请输入有效的正整数秒数")
            return

        if not self.running:
            self.running = True
            self.start_time = time.time() - self.elapsed_time
            self.update_timer()  # 开始计时
        else:
            messagebox.showinfo("信息", "计时器已经在运行中")

    def pause_timer(self):
        if self.running:
            self.running = False
            self.elapsed_time = time.time() - self.start_time  # 记录已过时间
            self.time_left -= int(self.elapsed_time)
        else:
            messagebox.showinfo("信息", "计时器未开始或已暂停")

    def reset_timer(self):
        self.running = False
        self.time_left = 0
        self.elapsed_time = 0
        self.time_label.config(text="00:00")
        self.time_entry.delete(0, tk.END)

5. 更新计时显示

每一秒更新一次剩余时间,并且当时间到达0时弹出提示框。

    def update_timer(self):
        if self.running:
            current_time = int(time.time() - self.start_time)
            time_remaining = max(self.time_left - current_time, 0)
            minutes = time_remaining // 60
            seconds = time_remaining % 60
            self.time_label.config(text=f"{minutes:02}:{seconds:02}")
            if time_remaining == 0:
                self.running = False
                messagebox.showinfo("时间到", "计时器已到达设置的时间!")
            else:
                self.root.after(1000, self.update_timer)  # 每秒更新一次计时器

6. 运行应用

最后,创建Tk()窗口实例,并启动应用:

if __name__ == "__main__":
    root = tk.Tk()
    app = TimerApp(root)
    root.mainloop()

7. 效果

在这里插入图片描述
在这里插入图片描述

8.完整代码

import tkinter as tk
from tkinter import messagebox
import time


class TimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("计时器")

        self.running = False  # 计时器是否正在运行
        self.time_left = 0  # 剩余时间
        self.start_time = 0  # 开始时间
        self.elapsed_time = 0  # 已经过的时间

        # 设置界面大小为适应内容
        self.root.resizable(False, False)

        # 显示时间的标签
        self.time_label = tk.Label(self.root, text="00:00", font=("宋体", 50), width=10, height=2)
        self.time_label.pack(pady=30)

        # 输入框,设置计时时间
        self.time_entry_label = tk.Label(self.root, text="设置时间 (秒):", font=("宋体", 12))
        self.time_entry_label.pack()

        self.time_entry = tk.Entry(self.root, font=("宋体", 14))
        self.time_entry.pack(pady=5)

        # 按钮框架
        self.buttons_frame = tk.Frame(self.root)
        self.buttons_frame.pack(pady=10)

        # 开始按钮
        self.start_button = tk.Button(self.buttons_frame, text="开始", font=("宋体", 14), width=10, command=self.start_timer)
        self.start_button.grid(row=0, column=0, padx=5, pady=5)

        # 暂停按钮
        self.pause_button = tk.Button(self.buttons_frame, text="暂停", font=("宋体", 14), width=10, command=self.pause_timer)
        self.pause_button.grid(row=0, column=1, padx=5, pady=5)

        # 重置按钮
        self.reset_button = tk.Button(self.buttons_frame, text="重置", font=("宋体", 14), width=10, command=self.reset_timer)
        self.reset_button.grid(row=0, column=2, padx=5, pady=5)

        # 更新计时
        self.update_timer()

    def start_timer(self):
        try:
            self.time_left = int(self.time_entry.get())  # 获取用户输入的时间
            if self.time_left <= 0:
                raise ValueError
        except ValueError:
            messagebox.showerror("输入错误", "请输入有效的正整数秒数")
            return

        if not self.running:
            self.running = True
            self.start_time = time.time() - self.elapsed_time
            self.update_timer()  # 开始计时
        else:
            messagebox.showinfo("信息", "计时器已经在运行中")

    def pause_timer(self):
        if self.running:
            self.running = False
            self.elapsed_time = time.time() - self.start_time  # 记录已过时间
            self.time_left -= int(self.elapsed_time)
        else:
            messagebox.showinfo("信息", "计时器未开始或已暂停")

    def reset_timer(self):
        self.running = False
        self.time_left = 0
        self.elapsed_time = 0
        self.time_label.config(text="00:00")
        self.time_entry.delete(0, tk.END)

    def update_timer(self):
        if self.running:
            current_time = int(time.time() - self.start_time)
            time_remaining = max(self.time_left - current_time, 0)
            minutes = time_remaining // 60
            seconds = time_remaining % 60
            self.time_label.config(text=f"{minutes:02}:{seconds:02}")
            if time_remaining == 0:
                self.running = False
                messagebox.showinfo("时间到", "计时器已到达设置的时间!")
            else:
                self.root.after(1000, self.update_timer)  # 每秒更新一次计时器


if __name__ == "__main__":
    root = tk.Tk()
    app = TimerApp(root)
    root.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

runepic

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

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

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

打赏作者

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

抵扣说明:

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

余额充值