【python】待办事项管理神器:从此告别拖延症,走向人生巅峰!

B站影视 2025-01-05 06:33 2

摘要:#本代码由@千万别学Excel 编辑并调试,在python3.8下运行正常#确保安装了tkcalendar库。如果未安装,可以通过以下命令安装:pip install tkcalendarimport tkinter as tkfrom tkinter imp

引言:

你是否曾经因为忘记重要任务而抓狂?

是否因为拖延症而让老板的眼神变得“意味深长”?

是否因为找不到合适的工具而让生活变得一团糟?

别担心!今天我要给大家安利一款“待办事项管理神器”,它不仅能让你的生活井井有条,还能让你在摸鱼的时候顺便学点金句,提升一下人生境界!

待办事项管理

一、功能亮点:成为您贴心的生活小助手

- **添加任务**:只需输入任务内容,点击“添加任务”,你的任务就会被记录在案。再也不用担心忘记老板交代的“重要事情”了!

- **标记完成**:完成任务后,点击“标记为完成”,瞬间成就感爆棚!

- **编辑任务**:任务内容写错了?没关系,点击“编辑任务”,随时修改,灵活应对!

- **删除任务**:不想干了?直接删除!(当然,老板的任务还是别删了……)

- **任务数显示**:日历上会显示每天的任务数量,让你一眼就知道哪天忙成狗,哪天可以偷偷摸鱼。

- **自动更新**:添加或删除任务后,日历会自动更新,再也不用手动调整了!

- **实时显示**:界面右侧会显示当前的日期和时间,精确到秒!从此再也不用问“今天几号?”了。

- **自动更新**:时间会每秒刷新一次,让你时刻掌握时间,绝不迟到!(除非你故意赖床……)

- **中英文对照**:每次打开程序,都会随机显示一句中英文对照的金句。比如:“成功是跌倒九次,爬起来十次。”——让你在摸鱼的时候也能学到人生哲理!

- **激励人心**:金句不仅有趣,还能激励你努力工作,走向人生巅峰!(当然,摸鱼的时候看看也行……)

二、**使用场景:生活工作两不误**

- 老板交代了一堆任务?别慌,打开程序,一一记录下来,再也不用担心忘事了!

- 完成任务后,点击“标记为完成”,瞬间感觉自己是个效率达人!

- 今天要买菜、交水电费、取快递?统统记下来,生活琐事也能轻松搞定!

- 摸鱼的时候看看金句,既能放松心情,又能提升自我,一举两得!

- 每天背单词、写作业、复习考试?用这个程序记录学习任务,再也不用担心拖延症了!

- 金句还能帮你提升英语水平,简直是学习神器!

---

- 这款程序是用Python写的,界面用的是Tkinter库,简单易用,功能强大!

- 代码清晰易懂,即使是小白也能轻松上手!(当然,如果你不会写代码,直接用也行……)

- 任务数据会自动保存到JSON文件中,即使关闭程序也不会丢失数据。

- 再也不用担心电脑突然崩溃,任务全没了!

- 使用了`tkcalendar`库,日历视图美观实用,任务数一目了然!

- 支持任务数显示,让你轻松掌握每天的工作量。

#本代码由@千万别学Excel 编辑并调试,在python3.8下运行正常#确保安装了tkcalendar库。如果未安装,可以通过以下命令安装:pip install tkcalendarimport tkinter as tkfrom tkinter import ttk, messageboximport jsonimport osfrom datetime import datetimefrom tkcalendar import Calendarimport randomclass ToDoListApp:def __init__(self, root):self.root = rootself.root.title("待办事项管理")# 任务列表self.tasks = self.sorted_tasks = # 排序后的任务列表# JSON 文件路径self.data_file = "todo_data.json"# 金句列表(中英文对照)self.quotes = [{"chinese": "成功是跌倒九次,爬起来十次。", "english": "Success is falling nine times and getting up ten."},{"chinese": "今天的努力,是明天的幸运。", "english": "Today's effort is tomorrow's luck."},{"chinese": "行动是治愈恐惧的良药。", "english": "Action is the antidote to fear."},{"chinese": "坚持就是胜利。", "english": "Persistence is victory."},{"chinese": "每一次努力,都是幸运的伏笔。", "english": "Every effort is a prelude to luck."},{"chinese": "梦想不会发光,发光的是追梦的你。", "english": "Dreams don't shine, but the dreamer does."},{"chinese": "不要等待机会,而要创造机会。", "english": "Don't wait for opportunities, create them."},{"chinese": "没有失败,只有暂时停止成功。", "english": "There is no failure, only temporary pauses in success."},{"chinese": "你有多努力,就有多幸运。", "english": "The harder you work, the luckier you get."},{"chinese": "相信自己,你能做到。", "english": "Believe in yourself, you can do it."}]# 创建主界面框架self.main_frame = tk.Frame(root)self.main_frame.grid(row=0, column=0, padx=10, pady=10)# 任务管理部分self.create_task_management_section# 右侧部分(日历视图、时间展示、金句展示)self.create_right_section# 加载任务self.load_tasksself.update_stats # 初始化统计信息self.update_calendar # 初始化日历self.update_datetime # 初始化实时日期和时间self.show_random_quote # 显示随机金句def create_task_management_section(self):"""创建任务管理部分"""task_frame = tk.LabelFrame(self.main_frame, text="任务管理")task_frame.grid(row=0, column=0, padx=10, pady=10)self.task_entry = tk.Entry(task_frame, width=40)self.task_entry.grid(row=0, column=0, padx=10, pady=10)self.add_button = tk.Button(task_frame, text="添加任务", command=self.add_task)self.add_button.grid(row=0, column=1, padx=10, pady=10)self.task_listbox = tk.Listbox(task_frame, width=70, height=15)self.task_listbox.grid(row=1, column=0, columnspan=3, padx=10, pady=10)self.complete_button = tk.Button(task_frame, text="标记为完成/未完成", command=self.toggle_complete)self.complete_button.grid(row=2, column=0, padx=10, pady=10)self.delete_button = tk.Button(task_frame, text="删除任务", command=self.delete_task)self.delete_button.grid(row=2, column=1, padx=10, pady=10)self.edit_button = tk.Button(task_frame, text="编辑任务", command=self.edit_task)self.edit_button.grid(row=3, column=0, padx=10, pady=10)self.clear_button = tk.Button(task_frame, text="清空所有", command=self.clear_tasks)self.clear_button.grid(row=3, column=1, padx=10, pady=10)self.pin_button = tk.Button(task_frame, text="置顶任务", command=self.pin_task)self.pin_button.grid(row=2, column=2, padx=10, pady=10)# 统计信息标签self.stats_label = tk.Label(task_frame, text="总任务数: 0 | 已完成: 0 | 未完成: 0 | 完成占比: 0%")self.stats_label.grid(row=4, column=0, columnspan=3, padx=10, pady=10)def create_right_section(self):"""创建右侧部分(日历视图、时间展示、金句展示)"""right_frame = tk.Frame(self.main_frame)right_frame.grid(row=0, column=1, padx=10, pady=10)# 日历视图calendar_frame = tk.LabelFrame(right_frame, text="日历视图")calendar_frame.grid(row=0, column=0, padx=10, pady=10)self.calendar = Calendar(calendar_frame, selectmode="none", year=datetime.now.year, month=datetime.now.month, width=30, height=10)self.calendar.grid(row=0, column=0, padx=10, pady=10)# 时间展示datetime_frame = tk.LabelFrame(right_frame, text="当前时间")datetime_frame.grid(row=1, column=0, padx=10, pady=10)self.datetime_label = tk.Label(datetime_frame, font=("Arial", 14))self.datetime_label.grid(row=0, column=0, padx=10, pady=10)# 金句展示quote_frame = tk.LabelFrame(right_frame, text="今日金句")quote_frame.grid(row=2, column=0, padx=10, pady=10)self.quote_label_chinese = tk.Label(quote_frame, font=("Arial", 12), wraplength=300)self.quote_label_chinese.grid(row=0, column=0, padx=10, pady=5)self.quote_label_english = tk.Label(quote_frame, font=("Arial", 12), wraplength=300, fg="blue")self.quote_label_english.grid(row=1, column=0, padx=10, pady=5)def update_calendar(self):"""更新日历视图"""# 清空日历上的任务数显示self.calendar.calevent_remove("all") # 移除所有事件# 统计每个日期的任务数task_count_by_date = {}for task in self.tasks:task_date = datetime.strptime(task["created_time"], "%Y-%m-%d %H:%M:%S").dateif task_date.year == datetime.now.year and task_date.month == datetime.now.month:if task_date in task_count_by_date:task_count_by_date[task_date] += 1else:task_count_by_date[task_date] = 1# 在日历上显示任务数for date, count in task_count_by_date.items:self.calendar.calevent_create(date, f"{count} 个任务", "task_count")self.calendar.tag_config("task_count", background="lightblue", foreground="black")def update_datetime(self):"""更新实时日期和时间"""now = datetime.nowcurrent_time = now.strftime("%Y-%m-%d %H:%M:%S")self.datetime_label.config(text=current_time)self.root.after(1000, self.update_datetime) # 每秒更新一次def show_random_quote(self):"""显示随机金句(中英文对照)"""quote = random.choice(self.quotes)self.quote_label_chinese.config(text=quote["chinese"])self.quote_label_english.config(text=quote["english"])def add_task(self):task = self.task_entry.getif task:new_task = {"task": task,"completed": False,"created_time": datetime.now.strftime("%Y-%m-%d %H:%M:%S"),"completed_time": None,"pinned": False # 默认任务不置顶}self.tasks.append(new_task)self.update_task_listboxself.task_entry.delete(0, tk.END)self.save_tasks # 保存任务self.update_stats # 更新统计信息self.update_calendar # 更新日历else:messagebox.showwarning("输入错误", "请输入任务内容。")def delete_task(self):selected_task_index = self.get_selected_task_indexif selected_task_index is not None:# 从 sorted_tasks 中获取任务selected_task = self.sorted_tasks[selected_task_index]# 从 tasks 中删除该任务self.tasks.remove(selected_task)self.update_task_listboxself.save_tasks # 保存任务self.update_stats # 更新统计信息self.update_calendar # 更新日历else:messagebox.showwarning("选择错误", "请选择一个任务来删除。")def toggle_complete(self):selected_task_index = self.get_selected_task_indexif selected_task_index is not None:# 从 sorted_tasks 中获取任务selected_task = self.sorted_tasks[selected_task_index]# 切换完成状态selected_task["completed"] = not selected_task["completed"]selected_task["completed_time"] = datetime.now.strftime("%Y-%m-%d %H:%M:%S") if selected_task["completed"] else Noneself.update_task_listboxself.save_tasks # 保存任务self.update_stats # 更新统计信息else:messagebox.showwarning("选择错误", "请选择一个任务来标记为完成/未完成。")def edit_task(self):selected_task_index = self.get_selected_task_indexif selected_task_index is not None:# 从 sorted_tasks 中获取任务selected_task = self.sorted_tasks[selected_task_index]new_task = self.task_entry.getif new_task:selected_task["task"] = new_taskself.update_task_listboxself.task_entry.delete(0, tk.END)self.save_tasks # 保存任务else:messagebox.showwarning("输入错误", "请输入新的任务内容。")else:messagebox.showwarning("选择错误", "请选择一个任务来编辑。")def clear_tasks(self):self.tasks = self.update_task_listboxself.save_tasks # 保存任务self.update_stats # 更新统计信息self.update_calendar # 更新日历def pin_task(self):"""将任务置顶"""selected_task_index = self.get_selected_task_indexif selected_task_index is not None:# 从 sorted_tasks 中获取任务selected_task = self.sorted_tasks[selected_task_index]# 切换置顶状态selected_task["pinned"] = not selected_task["pinned"]self.update_task_listboxself.save_tasks # 保存任务else:messagebox.showwarning("选择错误", "请选择一个任务来置顶。")def get_selected_task_index(self):"""获取当前选中的任务索引"""selected = self.task_listbox.curselectionif selected:return selected[0] # 返回第一个选中项的索引return Nonedef update_task_listbox(self):"""更新任务列表,并按照规则排序"""self.task_listbox.delete(0, tk.END)# 排序规则:# 1. 置顶任务排在最上方。# 2. 未完成的任务按录入时间降序排列。# 3. 已完成的任务按完成时间升序排列。pinned_tasks = [task for task in self.tasks if task["pinned"]]incomplete_tasks = sorted([task for task in self.tasks if not task["completed"] and not task["pinned"]],key=lambda x: x["created_time"],reverse=True)complete_tasks = sorted([task for task in self.tasks if task["completed"] and not task["pinned"]],key=lambda x: x["completed_time"])# 合并任务列表self.sorted_tasks = pinned_tasks + incomplete_tasks + complete_tasks# 显示任务for task in self.sorted_tasks:status = "✓" if task["completed"] else " "pin_status = "" if task["pinned"] else " "created_time = task.get("created_time", "未知时间")completed_time = f" | 完成时间: {task['completed_time']}" if task["completed"] else ""self.task_listbox.insert(tk.END, f"{pin_status} {status} {task['task']} | 录入时间: {created_time}{completed_time}")def update_stats(self):total_tasks = len(self.tasks)completed_tasks = sum(1 for task in self.tasks if task["completed"])incomplete_tasks = total_tasks - completed_taskscompletion_rate = (completed_tasks / total_tasks * 100) if total_tasks > 0 else 0self.stats_label.config(text=f"总任务数: {total_tasks} | 已完成: {completed_tasks} | 未完成: {incomplete_tasks} | 完成占比: {completion_rate:.1f}%")def load_tasks(self):"""从 JSON 文件加载任务"""if os.path.exists(self.data_file):try:with open(self.data_file, "r", encoding="utf-8") as file:self.tasks = json.load(file)# 兼容旧数据:确保每个任务都有 created_time、completed_time 和 pinned 字段for task in self.tasks:if "created_time" not in task:task["created_time"] = datetime.now.strftime("%Y-%m-%d %H:%M:%S")if "completed_time" not in task:task["completed_time"] = Noneif "pinned" not in task:task["pinned"] = Falseself.update_task_listboxexcept Exception as e:messagebox.showerror("加载错误", f"加载任务时出错: {e}")else:self.tasks = # 如果文件不存在,初始化空列表def save_tasks(self):"""将任务保存到 JSON 文件"""try:with open(self.data_file, "w", encoding="utf-8") as file:json.dump(self.tasks, file, ensure_ascii=False, indent=4)except Exception as e:messagebox.showerror("保存错误", f"保存任务时出错: {e}")if __name__ == "__main__":root = tk.Tkapp = ToDoListApp(root)root.mainloop

四、**用户体验:用过的都说好**

1. **用户A:**

“以前总是忘记老板交代的任务,用了这个程序后,再也没被骂过了!而且金句功能特别有趣,摸鱼的时候看看,感觉自己都变聪明了!”

2. **用户B:**

“作为一个拖延症晚期患者,这款程序简直是救星!任务管理、日历视图、金句展示,功能齐全,用起来特别顺手!”

3. **用户C:**

“金句中英文对照太棒了!不仅能激励自己,还能顺便学点英语,简直是摸鱼神器!”

---

五、**结语:从此告别拖延症!**

这款“待办事项管理神器”不仅能帮你管理任务,还能让你在摸鱼的时候学到人生哲理,简直是生活工作的必备工具!

如果你也想告别拖延症,走向人生巅峰,那就赶紧试试吧!

**PS:** 如果你觉得好用,记得分享给朋友哦!毕竟,好东西要大家一起用,摸鱼也要一起摸!

来源:景似幻梦

相关推荐