首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 图形用户界面(GUI)实战项目:打造个人记账应用

Python 图形用户界面(GUI)实战项目:打造个人记账应用

原创
作者头像
用户11690575
发布2025-06-10 09:16:27
发布2025-06-10 09:16:27
23600
代码可运行
举报
运行总次数:0
代码可运行

一、为什么选择 GUI + Python 做记账工具?

虽然现在很多人使用 App 或 Excel 表格进行个人财务管理,但使用 Python 自建工具有诸多优势:

  • 无需联网,保障隐私
  • 定制功能,界面灵活
  • 可持续扩展为预算分析、报表图表、语音输入等功能

我们将从 0 到 1 搭建一个图形化的个人记账本,使用模块包括:

模块名

用途

tkinter

图形界面

csv

数据存储

datetime

时间戳处理

matplotlib

图形分析(拓展)


二、记账系统功能规划

我们要实现的基本功能:

  1. 输入金额、分类、备注、日期
  2. 显示当前月账单列表
  3. 存入本地 CSV 文件(做“数据库”)
  4. 查询总支出/收入
  5. 可视化展示(进阶)

三、搭建图形界面:主窗口

1. 初始化界面

代码语言:javascript
代码运行次数:0
运行
复制
python复制编辑import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("我的记账本")
root.geometry("600x400")

2. 设置输入栏位

代码语言:javascript
代码运行次数:0
运行
复制
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)

3. 日期自动填入

代码语言:javascript
代码运行次数:0
运行
复制
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)

四、数据存储设计(CSV 文件)

我们将数据记录至一个文件 records.csv,内容格式:

代码语言:javascript
代码运行次数:0
运行
复制
csv复制编辑日期,金额,分类,备注
2025-06-10,50,餐饮,午饭
2025-06-10,120,交通,打车

添加一笔账目

代码语言:javascript
代码运行次数:0
运行
复制
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()  # 刷新账单列表

绑定按钮:

代码语言:javascript
代码运行次数:0
运行
复制
python复制编辑tk.Button(root, text="添加记录", command=save_record).grid(row=4, column=0, columnspan=2, pady=10)

五、显示账单列表(TreeView 表格)

我们用 ttk.Treeview 创建一个类似表格的视图展示账单:

代码语言:javascript
代码运行次数:0
运行
复制
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)

加载数据到表格中

代码语言:javascript
代码运行次数:0
运行
复制
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()

六、总支出/收入汇总功能

我们简单处理正负数判断支出与收入:

代码语言:javascript
代码运行次数:0
运行
复制
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 画图:

代码语言:javascript
代码运行次数:0
运行
复制
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)

效果图如下:


八、完整运行界面展示

将上述组件拼接可得出完整界面如下:

代码语言:javascript
代码运行次数:0
运行
复制
bash复制编辑python my_budget_app.py

运行后界面如图:

📷


九、项目目录结构建议

代码语言:javascript
代码运行次数:0
运行
复制
css复制编辑📂记账系统
├── main.py
├── records.csv
├── readme.md
└── 📂assets
    └── icons, logo 等

十、拓展建议与优化方向

优化方向

技术参考

增加分类下拉框

ttk.Combobox

图表支持多种类型

matplotlib, seaborn, pyecharts

多用户记账账户切换

用户登录系统设计

数据保存到数据库

SQLite / MySQL

移动端同步

Flask + 移动端网页

支持导出为 Excel

pandas.to_excel


十一、总结

通过本项目你掌握了:

  • 使用 tkinter 构建完整 GUI 应用
  • 数据存储与读取(CSV 模拟数据库)
  • 基本的数据可视化图表
  • 实用工具的完整开发流程

📌 本项目不仅可用于个人生活管理,也能作为简历中的 GUI 项目展示,展示你的全栈能力!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、为什么选择 GUI + Python 做记账工具?
  • 二、记账系统功能规划
  • 三、搭建图形界面:主窗口
    • 1. 初始化界面
    • 2. 设置输入栏位
    • 3. 日期自动填入
  • 四、数据存储设计(CSV 文件)
    • 添加一笔账目
  • 五、显示账单列表(TreeView 表格)
    • 加载数据到表格中
  • 六、总支出/收入汇总功能
  • 七、进阶功能:支出图表可视化
  • 八、完整运行界面展示
  • 九、项目目录结构建议
  • 十、拓展建议与优化方向
  • 十一、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档