本文将手把手教你用 Python 内置的 GUI 工具 Tkinter 开发一个完整的桌面记账应用,从界面布局到数据保存,实现一个真正可用的小工具。
记账应用是很多人入门 GUI 编程的首选项目,它涉及:
📌 本项目特点:
Tkinter 是 Python 官方推荐的 GUI 编程工具,具备以下优点:
bash复制编辑📂my_budget_app
├── main.py # 主程序
├── data.csv # 记账数据(自动生成)
└── assets/ # 可放图标或样式
采用“上方输入区 + 中部表格 + 下方汇总信息”布局。
python复制编辑import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import csv
import os
from datetime import datetime
python复制编辑root = tk.Tk()
root.title("我的记账本")
root.geometry("700x500")
# 输入区 Frame
input_frame = tk.Frame(root)
input_frame.pack(pady=10)
tk.Label(input_frame, text="日期(YYYY-MM-DD):").grid(row=0, column=0)
date_entry = tk.Entry(input_frame)
date_entry.grid(row=0, column=1)
tk.Label(input_frame, text="类型:").grid(row=0, column=2)
type_var = tk.StringVar()
type_box = ttk.Combobox(input_frame, textvariable=type_var)
type_box["values"] = ("收入", "支出")
type_box.grid(row=0, column=3)
tk.Label(input_frame, text="金额:").grid(row=1, column=0)
amount_entry = tk.Entry(input_frame)
amount_entry.grid(row=1, column=1)
tk.Label(input_frame, text="备注:").grid(row=1, column=2)
note_entry = tk.Entry(input_frame)
note_entry.grid(row=1, column=3)
python复制编辑DATA_FILE = "data.csv"
def save_data(date, type_, amount, note):
with open(DATA_FILE, "a", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow([date, type_, amount, note])
python复制编辑def add_record():
date = date_entry.get()
type_ = type_box.get()
amount = amount_entry.get()
note = note_entry.get()
if not (date and type_ and amount):
messagebox.showwarning("提示", "请填写完整信息")
return
save_data(date, type_, amount, note)
show_records()
clear_inputs()
tk.Button(input_frame, text="添加记录", command=add_record).grid(row=2, column=1, columnspan=2, pady=10)
使用 ttk.Treeview
表格展示数据。
python复制编辑columns = ("日期", "类型", "金额", "备注")
table = ttk.Treeview(root, columns=columns, show="headings")
for col in columns:
table.heading(col, text=col)
table.column(col, width=100)
table.pack(pady=10)
python复制编辑def show_records():
for row in table.get_children():
table.delete(row)
income_total = 0
expense_total = 0
if os.path.exists(DATA_FILE):
with open(DATA_FILE, "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
table.insert("", tk.END, values=row)
if row[1] == "收入":
income_total += float(row[2])
elif row[1] == "支出":
expense_total += float(row[2])
total_label.config(text=f"总收入:{income_total:.2f} 元 总支出:{expense_total:.2f} 元")
def clear_inputs():
date_entry.delete(0, tk.END)
amount_entry.delete(0, tk.END)
note_entry.delete(0, tk.END)
python复制编辑def delete_selected():
selected = table.selection()
if not selected:
return
values = table.item(selected[0])["values"]
if messagebox.askyesno("确认删除", f"确认删除:{values}?"):
with open(DATA_FILE, "r", encoding="utf-8") as f:
rows = list(csv.reader(f))
with open(DATA_FILE, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
for row in rows:
if row != list(values):
writer.writerow(row)
show_records()
tk.Button(root, text="删除选中记录", command=delete_selected).pack()
python复制编辑total_label = tk.Label(root, text="总收入:0 元 总支出:0 元", font=("Arial", 12), fg="blue")
total_label.pack(pady=10)
python复制编辑show_records()
root.mainloop()
📷 记账应用界面效果示意图:
拓展功能 | 实现方式 |
---|---|
图表统计收支 | 使用 matplotlib |
月度报表导出 | 自动生成 Excel 文件 |
用户登录/切换账户 | Tkinter 多窗口 + SQLite |
界面主题切换 | ttk.Style / dark mode |
云端同步 | Dropbox/OneDrive API |
通过本项目,你将掌握:
📌 适合作为初中级 Python 学习者的桌面开发入门实战项目!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。