正文:
在现代应用程序开发中,用户通过输入时间范围和任务内容,实现自动化提醒功能已成为常见场景。本项目采用Tkinter库实现简单GUI程序,用于用户设置每日提醒任务,并在指定时间自动发送通知。程序支持用户输入时间范围与任务内容,通过定时器自动触发发送提醒操作,确保用户在指定时间获取通知。
一、系统设计思路
- 系统架构设计:
– 输入模块:包含两个输入框用于记录时间范围和任务内容
– 处理逻辑:通过事件响应机制处理用户输入
– 输出模块:显示通知内容及是否成功发送状态
- 时间处理机制:
– 时间格式化:使用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()
三、关键功能说明
- 输入验证功能:
– 时间范围输入验证:通过时间字符串验证格式,使用datetime模块处理时间对象
– 任务内容输入验证:输入时验证内容格式符合要求
- 时间触发机制:
– 使用Tkinter的time模块实现定时任务
– 简单的定时触发逻辑
四、测试验证
测试程序在本地环境中运行,验证时间范围和任务内容输入是否正确,时间触发是否按预期发送通知。输出结果显示是否成功发送通知。
该程序具有良好的可扩展性,可通过添加更多定时器或事件处理逻辑进行扩展。