日程管理工具源碼
最近到了假期,時間過得很快,但是效率又不高,于是我想到用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)
? ? ? ? # 創(chuàng)建標(biāo)簽、文本框和按鈕
? ? ? ? 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")
? ? ? ??
? ? ? ? # 創(chuàng)建時間選擇框
? ? ? ? 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")
? ? ? ??
? ? ? ? # 創(chuàng)建日程列表框
? ? ? ? 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)
? ? ? ? # 添加示例數(shù)據(jù)
? ? ? ? self.schedule_list = [("制作每日一句", "07:50:00"), ("做Python題", "08:30:00"), ("馬上關(guān)機(jī)睡覺", "12:24:40")]
? ? ? ? for schedule, _ in self.schedule_list:
? ? ? ? ? ? self.schedule_listbox.insert(tk.END, schedule+":"+_)
? ? ? ? # 創(chuàng)建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"現(xiàn)在時間:{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):
? ? ? ? # 設(shè)置自定義的彈窗
? ? ? ? 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:
? ? ? ? ? ? ? ? # 調(diào)用自定義消息框
? ? ? ? ? ? ? ? self.show_custom_info(f"提醒!{schedule}".split(":")[0]+f":{time}")
? ? ? ? ? ? ? ? #messagebox.showinfo("提醒", f"該事件已到時:{schedule}{time}")
? ? ? ??
? ? ? ? self.master.after(1000, self.check_schedule)? # 每隔一秒鐘檢查一次日程
# 創(chuàng)建主窗口
root = tk.Tk()
# 實(shí)例化日程管理應(yīng)用程序
app = ScheduleApp(root)
# 運(yùn)行主循環(huán)
root.mainloop()