当前位置:首页>python>用Python自制一个「本地加密待办清单」:不联网、不订阅、密码保护、双击打勾、窗口置顶

用Python自制一个「本地加密待办清单」:不联网、不订阅、密码保护、双击打勾、窗口置顶

  • 2026-09-04 08:20:34
用Python自制一个「本地加密待办清单」:不联网、不订阅、密码保护、双击打勾、窗口置顶
最近我发现一个很尴尬的现象:
我电脑上装了好几个待办类 App,结果真正打开的频率最高的是……记事本。
为什么?
  • 因为大部分待办工具都存在下面这些让我不舒服的地方:
  • 要登录账号(数据上云,我不放心)
  • 要开通会员才能同步/提醒/去广告
  • 界面花里胡哨,加载半天就为了加一个任务
最关键的: 万一哪天公司倒闭/跑路,我的任务列表就没了
于是我决定: 不如自己写一个 。
实现目标:数据只存在你电脑里,连我自己都看不到——一个极简主义者的私人小本本
  • 完全本地存储
  • 带密码保护(别人拿走电脑也看不了)
  • 界面极简但实用
  • 支持双击打勾、窗口置顶(适合边工作边看)
  • 开发时间控制在半天以内
最终用 Python + Tkinter 实现了下面这个小工具:
01
这个小工具到底能解决什么痛点?
  • 隐私最敏感的人:任务里可能有收入、密码提示、健康计划、情感日记……不想上任何云。
  • 极简主义者:不需要分类、标签、优先级、子任务、提醒……就想快速记、快速看、快速清。
  • 多屏/副屏党:把小窗口置顶放在角落,随时瞟一眼今天还有什么没做。
  • 轻度强迫症:看到 ✓ 出现的那一刻,真的有种“事情被干掉”的快感。
02
技术选型背后的小纠结
需求选项
对比
最终选择
原因
GUI 框架
Tkinter / PyQt / DearPyGui / Flet
Tkinter
自带、无需额外安装、最快上手
加密方式
hashlib 简单哈希 / AES / Fernet
Fernet
简单好用,自带完整性校验
密码 → 密钥
直接 md5 / PBKDF2
PBKDF2
带迭代次数,抗暴力破解能力强一点
数据格式
pickle / json / toml
json
最直观,中文不乱码,人类可读
保存时机
仅关闭时保存 / 每次操作都保存
每次操作都保存
(防意外崩溃/强杀)
03
核心代码拆解(新手也能看懂)
  1. 密码 → 加密密钥(最关键的安全环节)
defderive_key(password: str) -> bytes:    salt = b'simple_todo_salt'# 固定盐,实际项目建议随机+存文件    kdf = hashlib.pbkdf2_hmac('sha256', # 哈希算法        password.encode(), # 用户密码转字节        salt, # 防彩虹表100000, # 迭代10万次,增加破解难度        dklen=32# 输出32字节,正好是Fernet需要的    )return base64.urlsafe_b64encode(kdf) # Fernet要求base64编码
2. 第一次使用 vs 后续使用(密码逻辑)
if os.path.exists(DATA_FILE):    prompt = "请输入密码解锁任务列表"else:    prompt = "第一次使用,请设置密码(用于加密)"# 循环直到密码正确或用户取消while not success:pwd = simpledialog.askstring("密码", prompt, show='*')ifpwdis None:exit() # 点取消直接退出    success = load_tasks(pwd)
3. 双击打勾的爽感是怎么实现的?
deftoggle_complete(event):try:        idx = listbox.curselection()[0] # 得到选中行号        tasks[idx][1] = not tasks[idx][1] # 布尔值取反        update_listbox() # 刷新显示        save_tasks(current_password) # 立即加密保存except:pass# 没选中就啥也不干
Listbox 里显示时会自动加前缀:
未完成 → □ 买牛奶
已完成 → ✓ 买牛奶(灰色文字)
04
安全性说明(很重要!)
这个工具能防什么?
  • 防朋友/同事/家人随便打开看
  • 防普通的文件搜索直接看到明文任务
  • 防低级的数据恢复工具直接读明文
防不了什么?
  • 如果有人拿到你的电脑 + 知道/猜到你的密码 → 还是能看
  • 如果你密码设置成 123456 / birthday → 暴力破解几分钟就出结果
  • 如果电脑本身被 root / 键盘记录 → 密码输入过程可能被截获
一句话总结: 它把门槛从“0”提高到了“需要你主动输入正确密码” ,对大多数日常场景已经足够用了。
05
未来可能的升级方向(欢迎你来认领)
  • 随机 salt 并保存在文件开头(更安全)
  • 支持修改/重置密码(需要旧密码验证)
  • 增加“今天”“本周”“以后”三个分类标签
  • 支持简单优先级(高/中/低,用颜色区分)
  • 添加轻量提醒(到点弹出小窗)
  • 用 pyinstaller 打包成单个 exe,无需装 Python
  • 换成 customtkinter 或 ttkbootstrap,做更现代的深色/圆角界面
如果你对上面某个方向感兴趣,或者你有更好的实现思路,欢迎留言告诉我~
我可能会继续更新这篇,把新功能加进来。
代码已开源,欢迎 star / fork / 提建议:‣ https://github.com/shansui525/python_example/tree/main/ToDoList
好了,今天的分享就到这里。
如果你也喜欢折腾这种“私人小工具”,不妨试着自己改一改、加点功能——过程比结果更有趣。

往期推荐

Tkinter 学习教程:从入门到实践

用Python构建黄金投资追踪工具:基于Tkinter和API的GUI应用详解

手把手教你用 Python openpyxl 打造专业 Excel 报表(完整代码+注释)

深度解析数据血缘分析的Python实现 (公众号版本)

Pandas进阶操作:数据清洗与异常值处理

深入解析 Python Requests 库 —— 优雅的 HTTP 请求神器

最新文章

随机文章