一、项目简介
本项目基于 Python 内置TkinterGUI 库开发一款轻量情侣恋爱日记桌面工具,不需要 MySQL、SQLite 等数据库,全部数据存储在本地 txt 文本文件。 适合情侣记录恋爱日记、互相留言,自动计算恋爱在一起天数,内置随机甜蜜情话。所有数据保存在程序同目录下 3 个 txt 文件,移植简单,双击 py 文件直接运行。
技术栈:
- Python3
- Tkinter(GUI 图形界面,python 自带无需额外 pip 安装)
- datetime 时间处理
- os 文件操作
- random 随机情话
二、实现功能清单
- ✅ 自动计算恋爱在一起天数,可修改相恋起始日期(love_config.txt)
- ✅ 随机展示甜蜜情话
- ✅ 身份选择:男朋友 / 女朋友
- ✅ 恋爱日记撰写保存,滚动文本框多行输入
- ✅ 双向留言板短留言功能
- ✅ 弹窗查看全部历史日记 + 全部留言记录
- ✅ 本地 txt 持久化存储:日记、留言、相恋配置,关闭程序数据不丢失
- ✅ 消息弹窗提示(保存成功、空内容校验)
- ✅ 粉色浪漫主题 UI 界面
三、完整源代码
新建文件 couple_diary.py,复制下面全部代码:
import tkinter as tk
from tkinter import scrolledtext, messagebox
from datetime import datetime
import os
import random
# ===================== 全局配置 & 本地文件存储(无数据库) =====================
# 本地保存文件
DIARY_FILE = "diary.txt"
MSG_FILE = "message.txt"
CONFIG_FILE = "love_config.txt"
# 初始化默认相恋日期
def init_config():
if not os.path.exists(CONFIG_FILE):
with open(CONFIG_FILE, "w", encoding="utf-8") as f:
f.write("2025-01-01")
# 计算恋爱天数
def get_love_days():
init_config()
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
start_day = f.read().strip()
try:
start = datetime.strptime(start_day, "%Y-%m-%d")
now = datetime.now()
days = (now - start).days
return days, start_day
except:
return 0, "2025-01-01"
# 保存日记
def save_diary(user, content):
t = datetime.now().strftime("%Y-%m-%d %H:%M")
line = f"【{user}】{t}\n{content}\n------------------------------------\n"
with open(DIARY_FILE, "a", encoding="utf-8") as f:
f.write(line)
# 读取所有日记
def load_diary():
if not os.path.exists(DIARY_FILE):
return "暂无恋爱日记,快来记录甜蜜日常吧~"
with open(DIARY_FILE, "r", encoding="utf-8") as f:
return f.read()
# 保存留言
def save_msg(user, content):
t = datetime.now().strftime("%Y-%m-%d %H:%M")
line = f"[{user}] {t}:{content}\n"
with open(MSG_FILE, "a", encoding="utf-8") as f:
f.write(line)
# 读取留言
def load_msg():
if not os.path.exists(MSG_FILE):
return "暂无双向留言,快和TA说句话吧~"
with open(MSG_FILE, "r", encoding="utf-8") as f:
return f.read()
# 甜蜜情话库
love_words = [
"双向奔赴,才是恋爱最好的样子",
"岁岁年年,万喜万般宜",
"山野千里,你是我藏在心里的浪漫",
"世界再大,我的偏爱永远是你",
"爱意不会消失,思念日日递增",
"和你在一起,晚风都格外温柔"
]
# ===================== 窗口UI & 功能 =====================
root = tk.Tk()
root.title("💕 情侣恋爱日记空间 | 无数据库版")
root.geometry("680x600")
root.configure(bg="#fff0f5")
# 顶部标题
tk.Label(root, text="情侣恋爱日记空间", font=("微软雅黑", 20, "bold"),
fg="#ff5e87", bg="#fff0f5").pack(pady=10)
# 恋爱天数展示
love_days, start_date = get_love_days()
day_text = tk.Label(root, text=f"💘 我们已经在一起 {love_days} 天 | 起始日:{start_date}",
font=("微软雅黑", 11), fg="#d6336c", bg="#fff0f5")
day_text.pack()
# 随机情话
tip = random.choice(love_words)
tk.Label(root, text=f"✨ 今日情话:{tip}", font=("微软雅黑", 9),
fg="#888", bg="#fff0f5").pack(pady=5)
# 身份选择
frame_top = tk.Frame(root, bg="#fff0f5")
frame_top.pack(pady=8)
tk.Label(frame_top, text="选择身份:", bg="#fff0f5").grid(row=0, column=0)
user_var = tk.StringVar(value="男朋友")
tk.Radiobutton(frame_top, text="男朋友", variable=user_var,
value="男朋友", bg="#fff0f5").grid(row=0, column=1, padx=10)
tk.Radiobutton(frame_top, text="女朋友", variable=user_var,
value="女朋友", bg="#fff0f5").grid(row=0, column=2)
# 日记区域
tk.Label(root, text="📝 写下恋爱日记", font=("微软雅黑", 12, "bold"),
bg="#fff0f5", fg="#ff6688").pack()
diary_input = scrolledtext.ScrolledText(root, width=75, height=6, font=("微软雅黑", 10))
diary_input.pack(pady=5)
def add_diary():
content = diary_input.get("1.0", tk.END).strip()
if not content:
messagebox.showwarning("提示", "日记内容不能为空!")
return
user = user_var.get()
save_diary(user, content)
diary_input.delete("1.0", tk.END)
messagebox.showinfo("成功", "💖 日记保存成功!")
tk.Button(root, text="保存日记", command=add_diary,
bg="#ff87a2", fg="white", width=12).pack(pady=3)
# 留言区域
tk.Label(root, text="💌 双向留言板", font=("微软雅黑", 12, "bold"),
bg="#fff0f5", fg="#ff6688").pack(pady=8)
msg_frame = tk.Frame(root, bg="#fff0f5")
msg_frame.pack()
msg_input = tk.Entry(msg_frame, width=60, font=("微软雅黑", 10))
msg_input.grid(row=0, column=0)
def add_message():
content = msg_input.get().strip()
if not content:
messagebox.showwarning("提示", "留言不能为空!")
return
user = user_var.get()
save_msg(user, content)
msg_input.delete(0, tk.END)
messagebox.showinfo("成功", "💞 留言发送成功!")
tk.Button(msg_frame, text="发送留言", command=add_message,
bg="#ffb3c1", width=10).grid(row=0, column=1, padx=5)
# 查看全部内容
frame_show = tk.Frame(root, bg="#fff0f5")
frame_show.pack(pady=10)
def show_all():
diary_data = load_diary()
msg_data = load_msg()
info = f"========== 💕 恋爱日记 ==========\n{diary_data}\n\n========== 💌 双向留言 ==========\n{msg_data}"
win = tk.Toplevel(root)
win.title("恋爱全部记录")
win.geometry("600x500")
st = scrolledtext.ScrolledText(win, font=("微软雅黑", 10))
st.pack(fill=tk.BOTH, expand=True)
st.insert(tk.END, info)
st.config(state=tk.DISABLED)
tk.Button(root, text="查看全部日记&留言", command=show_all,
bg="#ff7096", fg="white", width=20).pack()
root.mainloop()
四、运行环境 & 运行步骤
环境要求
-
Python 3.7 及以上版本
-
Tkinter 一般 python 自带,如果运行报错:
-
Windows:重装 Python,勾选 tcl/tk 组件
-
Ubuntu:
sudo apt install python3-tk
运行步骤
1.将码保存为 couple_diary.py
2.打开终端,cd 到代码所在文件夹
3.执行命令:
python couple_diary.py
五、程序操作说明
- 选择身份:男朋友 / 女朋友,保存日记、留言会带上身份标记。
- 写日记:在大文本框输入恋爱日常,点击保存日记写入本地 txt。
- 双向留言:单行输入框写简短留言,点击发送留言。
- 查看全部日记 & 留言:弹出新窗口浏览所有历史记录。
- 关闭程序数据不会丢失,全部保存在 txt 文本。
六、项目效果说明
1.主窗口粉色浪漫主题,顶部实时显示恋爱天数;每次打开随机一句情话。
2.空输入会弹窗警告,防止保存空白内容。
3."查看全部" 弹窗为只读滚动文本,防止误修改历史记录。
4.文本全部 utf‑8 编码,中文不乱码
七、可拓展优化方向(二次开发建议)
- 增加修改相恋日期 UI 窗口,不用手动改 txt 文件
- 增加删除日记、删除留言功能
- 增加导出为 Word/HTML 备忘录功能
- 增加照片插入功能
- 打包 exe,不用装 Python 环境双击运行(
pyinstaller) - 增加密码登录访问情侣空间
- 情话库扩充,增加随机壁纸背景
八、小结
本案例适合 Python Tkinter 练手项目,无数据库设计,使用 txt 文件做持久化存储,逻辑简单易懂。适合课程作业、小工具开发学习。Tkinter 实现完整 GUI 交互,文件读写、弹窗组件、子窗口、滚动文本框等常用控件全部覆盖。