虽然现在很多人使用 App 或 Excel 表格进行个人财务管理,但使用 Python 自建工具有诸多优势:
我们将从 0 到 1 搭建一个图形化的个人记账本,使用模块包括:
模块名 | 用途 |
---|---|
tkinter | 图形界面 |
csv | 数据存储 |
datetime | 时间戳处理 |
matplotlib | 图形分析(拓展) |
我们要实现的基本功能:
python复制编辑import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("我的记账本")
root.geometry("600x400")
python复制编辑tk.Label(root, text="金额:").grid(row=0, column=0)
amount_var = tk.StringVar()
tk.Entry(root, textvariable=amount_var).grid(row=0, column=1)
tk.Label(root, text="分类:").grid(row=1, column=0)
category_var = tk.StringVar()
tk.Entry(root, textvariable=category_var).grid(row=1, column=1)
tk.Label(root, text="备注:").grid(row=2, column=0)
note_var = tk.StringVar()
tk.Entry(root, textvariable=note_var).grid(row=2, column=1)
python复制编辑from datetime import datetime
tk.Label(root, text="日期:").grid(row=3, column=0)
date_var = tk.StringVar(value=datetime.now().strftime("%Y-%m-%d"))
tk.Entry(root, textvariable=date_var).grid(row=3, column=1)
我们将数据记录至一个文件 records.csv
,内容格式:
csv复制编辑日期,金额,分类,备注
2025-06-10,50,餐饮,午饭
2025-06-10,120,交通,打车
python复制编辑import csv
def save_record():
with open("records.csv", mode="a", newline='', encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow([
date_var.get(),
amount_var.get(),
category_var.get(),
note_var.get()
])
show_records() # 刷新账单列表
绑定按钮:
python复制编辑tk.Button(root, text="添加记录", command=save_record).grid(row=4, column=0, columnspan=2, pady=10)
我们用 ttk.Treeview
创建一个类似表格的视图展示账单:
python复制编辑tree = ttk.Treeview(root, columns=("日期", "金额", "分类", "备注"), show="headings")
tree.heading("日期", text="日期")
tree.heading("金额", text="金额")
tree.heading("分类", text="分类")
tree.heading("备注", text="备注")
tree.grid(row=5, column=0, columnspan=4)
python复制编辑def show_records():
for row in tree.get_children():
tree.delete(row)
try:
with open("records.csv", newline='', encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
tree.insert('', tk.END, values=row)
except FileNotFoundError:
pass
show_records()
我们简单处理正负数判断支出与收入:
python复制编辑def summary():
total_income = 0
total_expense = 0
with open("records.csv", newline='', encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
try:
amount = float(row[1])
if amount > 0:
total_income += amount
else:
total_expense += abs(amount)
except:
continue
result = f"总收入:{total_income} 元,支出:{total_expense} 元"
result_label.config(text=result)
tk.Button(root, text="查看汇总", command=summary).grid(row=6, column=0, pady=10)
result_label = tk.Label(root, text="")
result_label.grid(row=6, column=1)
🎯 统计每个分类的支出比例,用 matplotlib
画图:
python复制编辑import matplotlib.pyplot as plt
from collections import defaultdict
def show_pie_chart():
data = defaultdict(float)
with open("records.csv", newline='', encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
try:
amount = float(row[1])
if amount < 0:
data[row[2]] += abs(amount)
except:
continue
labels = data.keys()
sizes = data.values()
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title("支出分类占比图")
plt.axis('equal')
plt.show()
tk.Button(root, text="支出图表", command=show_pie_chart).grid(row=6, column=2, pady=10)
效果图如下:
将上述组件拼接可得出完整界面如下:
bash复制编辑python my_budget_app.py
运行后界面如图:
📷
css复制编辑📂记账系统
├── main.py
├── records.csv
├── readme.md
└── 📂assets
└── icons, logo 等
优化方向 | 技术参考 |
---|---|
增加分类下拉框 | ttk.Combobox |
图表支持多种类型 | matplotlib, seaborn, pyecharts |
多用户记账账户切换 | 用户登录系统设计 |
数据保存到数据库 | SQLite / MySQL |
移动端同步 | Flask + 移动端网页 |
支持导出为 Excel | pandas.to_excel |
通过本项目你掌握了:
tkinter
构建完整 GUI 应用
📌 本项目不仅可用于个人生活管理,也能作为简历中的 GUI 项目展示,展示你的全栈能力!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。