小提示功能实现与测试验证


正文:

在现代应用程序开发中,用户通过输入时间范围和任务内容,实现自动化提醒功能已成为常见场景。本项目采用Tkinter库实现简单GUI程序,用于用户设置每日提醒任务,并在指定时间自动发送通知。程序支持用户输入时间范围与任务内容,通过定时器自动触发发送提醒操作,确保用户在指定时间获取通知。

一、系统设计思路

  1. 系统架构设计:

– 输入模块:包含两个输入框用于记录时间范围和任务内容
– 处理逻辑:通过事件响应机制处理用户输入
– 输出模块:显示通知内容及是否成功发送状态

  1. 时间处理机制:

– 时间格式化:使用datetime模块处理时间字符串
– 定时器:通过Tkinter的time模块实现时间触发

二、代码实现与测试

import tkinter as tk
from datetime import datetime

class TimeReminderApp:
    def __init__(self, root):
        self.root = root
        self.root.title("每日提醒器")

        self.time_input_frame = tk.Frame(root, bg="#f4f4f4")
        self.time_input_frame.pack(pady=10)

        self.time_input_label = tk.Label(self.time_input_frame, text="时间范围(小时:分钟):", font=("Arial", 14))
        self.time_input_label.pack()

        self.time_input_hours = tk.Entry(
            self.time_input_frame,
            width=6,
            font=("Arial", 14)
        )
        self.time_input_hours.pack()

        self.time_input_minutes = tk.Entry(
            self.time_input_frame,
            width=6,
            font=("Arial", 14)
        )
        self.time_input_minutes.pack()
        self.time_input_minutes.bind(
            "<KeyRelease>", lambda event: self.on_time_changed(event)
        )

        self.task_input_label = tk.Label(self.time_input_frame, text="任务内容:", font=("Arial", 14))
        self.task_input_label.pack()

        self.task_input = tk.Entry(
            self.time_input_frame,
            width=6,
            font=("Arial", 14)
        )
        self.task_input.pack()

        self.save_button = tk.Button(
            self.time_input_frame,
            text="保存设置",
            font("Arial", 12),
            command=self.save_settings
        )
        self.save_button.pack()

        self.output_label = tk.Label(self.root, text="通知信息:", font=("Arial", 14))
        self.output_label.pack()

        self.result_label = tk.Label(self.root, text="是否已发送:", font=("Arial", 14))
        self.result_label.pack()

        self.show_result_button = tk.Button(
            self.root,
            text="查看结果",
            font("Arial", 12),
            command=self.show_result
        )
        self.show_result_button.pack()

        self.timer_label = tk.Label(self.root, text="时间:", font=("Arial", 14))
        self.timer_label.pack()

        self.timer = tk.Label(self.root, text="08:00", font=("Arial", 14))
        self.timer.pack()

        self.timer.bind(
            "&Time::TimeChanged",
            lambda event: self.on_timer_changed(event)
        )

    def on_time_changed(self, event):
        time_str = event.widget.get()
        time_range = time_str.split("-")
        hours = int(time_range[0])
        minutes = int(time_range[1])
        self.time_input_hours.set(f"{hours:02d}:{minutes:02d}")

        # 获取当前时间
        current_time = datetime.now().strftime("%H:%M")
        self.timer_label.config(text=current_time)

    def on_timer_changed(self, event):
        # 处理时间范围和任务内容
        time_range_str = self.time_input_hours.get()
        task_content = self.task_input.get()
        if time_range_str and task_content:
            try:
                # 将时间范围转换为时间对象
                time_obj = datetime.strptime(time_range_str, "%H:%M")
                # 检查是否当前时间在时间范围内
                if time_obj >= datetime.now():
                    # 发送通知
                    result_message = f"{task_content} 已开始"
                    self.output_label.config(text=result_message)
                    self.result_label.config(text="已成功发送")
                    # 保存设置
                    self.save_settings()
            except Exception as e:
                print(f"Error: {e}")

    def save_settings(self):
        # 保存时间范围和任务内容
        time_range_str = self.time_input_hours.get()
        task_content = self.task_input.get()
        # 存储到本地文件
        with open("settings.txt", "w") as file:
            file.write(f"时间范围: {time_range_str}\n任务内容: {task_content}\n")

    def show_result(self):
        result_message = self.result_label.cget("text")
        print(f"通知信息: {result_message}")
        self.output_label.config(text=result_message)
        self.result_label.config(text="已成功发送")

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

三、关键功能说明

  1. 输入验证功能:

– 时间范围输入验证:通过时间字符串验证格式,使用datetime模块处理时间对象
– 任务内容输入验证:输入时验证内容格式符合要求

  1. 时间触发机制:

– 使用Tkinter的time模块实现定时任务
– 简单的定时触发逻辑

四、测试验证

测试程序在本地环境中运行,验证时间范围和任务内容输入是否正确,时间触发是否按预期发送通知。输出结果显示是否成功发送通知。

该程序具有良好的可扩展性,可通过添加更多定时器或事件处理逻辑进行扩展。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注