日程管理工具源码
最近到了假期,时间过得很快,但是效率又不高,于是我想到用Python制作一下日程管理工具,用于提醒我抓紧时间做好重要的事情。软件的图如下:

源码展如如下:
import tkinter as tk
from tkinter import messagebox
from datetime import datetime
import tkinter.font as tkFont
class ScheduleApp:
def __init__(self, master):
self.master = master
self.master.title("日程管理1.0 by Gordon")
self.font = tkFont.Font(family="楷体", size=13)
# 创建标签、文本框和按钮
self.label = tk.Label(master, text="日程:",font=self.font)
self.label.grid(row=0, column=0, padx=10, pady=10, sticky="e")
self.entry = tk.Entry(master, width=35)
self.entry.grid(row=0, column=1, padx=10, pady=10, sticky="w",columnspan = 3)
self.time_label = tk.Label(master, text="时间:",font=self.font)
self.time_label.grid(row=1, column=0, padx=10, pady=10, sticky="e")
# 创建时间选择框
self.hour_var = tk.StringVar(master)
self.minute_var = tk.StringVar(master)
self.second_var = tk.StringVar(master)
self.hour_var.set("08")
self.minute_var.set("10")
self.second_var.set("00")
self.hour_option = tk.OptionMenu(master, self.hour_var, *range(24))
self.minute_option = tk.OptionMenu(master, self.minute_var, *range(60))
self.second_option = tk.OptionMenu(master, self.second_var, *range(60))
self.hour_option.grid(row=1, column=1, padx=10, pady=10, sticky="w")
self.minute_option.grid(row=1, column=2, padx=10, pady=10, sticky="w")
self.second_option.grid(row=1, column=3, padx=10, pady=10, sticky="w")
self.edit_label = tk.Label(master, text="编辑:",font=self.font)
self.edit_label.grid(row=2, column=0, padx=10, pady=10, sticky="e")
self.add_btn = tk.Button(master, text="添加", font=self.font, command=self.add_schedule)
self.add_btn.grid(row=2, column=1, ipadx=7,padx=10, pady=10, sticky="w")
self.modify_btn = tk.Button(master, text="修改", font=self.font, command=self.modify_schedule)
self.modify_btn.grid(row=2, column=2, ipadx=7, padx=10, pady=10, sticky="w")
self.delete_btn = tk.Button(master, text="删除", font=self.font, command=self.delete_schedule)
self.delete_btn.grid(row=2, column=3, ipadx=7, padx=10, pady=10, sticky="w")
# 创建日程列表框
self.schedule_listbox = tk.Listbox(master,font=self.font,height=6,width=35)
self.schedule_listbox.grid(row=3, column=0, columnspan=4, padx=10, pady=10)
# 添加示例数据
self.schedule_list = [("制作每日一句", "07:50:00"), ("做Python题", "08:30:00"), ("马上关机睡觉", "12:24:40")]
for schedule, _ in self.schedule_list:
self.schedule_listbox.insert(tk.END, schedule+":"+_)
# 创建Label来显示时间
self.nowtime_label = tk.Label(root, text="时间", font=("Arial", 16))
self.nowtime_label.grid(row=4, column=0, columnspan=4, padx=10, pady=1)
self.update_time()
# 启动定时器
self.check_schedule()
def update_time(self):
current_time = datetime.now().strftime("%H:%M:%S")
self.nowtime_label.config(text=f"现在时间:{current_time}")
self.nowtime_label.after(1000, self.update_time) # 每隔一秒钟更新时间
def get_time(self):
schedule = self.entry.get()
hour = self.hour_var.get()
minute = self.minute_var.get()
second = self.second_var.get()
time = f"{hour:0>2}:{minute:0>2}:{second:0>2}"
return schedule,time
def add_schedule(self):
schedule,time = self.get_time()
if schedule and time:
self.schedule_list.append((schedule, time))
self.schedule_listbox.insert(tk.END, schedule+":"+time)
self.entry.delete(0, tk.END)
self.hour_var.set("08")
self.minute_var.set("00")
self.second_var.set("00")
else:
messagebox.showwarning("警告", "请输入事件和时间!")
def modify_schedule(self):
selected_index = self.schedule_listbox.curselection()
old_schedule = self.schedule_listbox.get(selected_index)
if selected_index:
schedule,time = self.get_time()
if schedule and time:
index = selected_index[0]
self.schedule_list[index] = (schedule, time)
self.schedule_listbox.delete(index)
self.schedule_listbox.insert(index, schedule)
self.entry.delete(0, tk.END)
self.hour_var.set("08")
self.minute_var.set("00")
self.second_var.set("00")
elif time and not schedule:
index = selected_index[0]
self.schedule_list[index] = (old_schedule, time)
self.schedule_listbox.delete(index)
self.schedule_listbox.insert(index,old_schedule.split(":")[0]+":"+time)
#self.schedule_listbox.insert(index,old_schedule.split(":")[0]+":"+time)
# print(index,self.schedule_list[index])
else:
messagebox.showwarning("警告", "请输入事件和时间!")
else:
messagebox.showwarning("警告", "请选择要修改的事件!")
def delete_schedule(self):
# 删除日程
selected_index = self.schedule_listbox.curselection()
if selected_index:
index = selected_index[0]
self.schedule_list.pop(index)
self.schedule_listbox.delete(index)
self.entry.delete(0, tk.END)
self.hour_var.set("00")
self.minute_var.set("00")
self.second_var.set("00")
else:
messagebox.showwarning("警告", "请选择要删除的事件!")
def show_custom_info(self,message):
# 设置自定义的弹窗
top = tk.Toplevel()
top.title("提醒")
label = tk.Label(top, text=message, font=("楷体", 18))
label.pack(padx=100, pady=60)
button = tk.Button(top, text="OK", width=10, command=top.destroy)
button.pack(pady=10)
def check_schedule(self):
now = datetime.now().strftime("%H:%M:%S")
for schedule, time in self.schedule_list:
if now == time:
# 调用自定义消息框
self.show_custom_info(f"提醒!{schedule}".split(":")[0]+f":{time}")
#messagebox.showinfo("提醒", f"该事件已到时:{schedule}{time}")
self.master.after(1000, self.check_schedule) # 每隔一秒钟检查一次日程
# 创建主窗口
root = tk.Tk()
# 实例化日程管理应用程序
app = ScheduleApp(root)
# 运行主循环
root.mainloop()