首页 抖音快讯文章正文

Python GUI 编程入门教程 第38章 记账本应用升级前10大额支出排行榜

抖音快讯 2025年09月05日 10:52 2 admin

38.1 项目目标

  1. 新增 “导出Top 10支出排行榜” 功能
  2. 使用柱状图展示金额最高的 10 笔支出
  3. 普通用户仅能查看自己的,管理员可查看所有用户的数据
  4. 支持导出为 PNG 图片

38.2 数据准备

我们只筛选 支出 记录,并按金额排序,取前 10 条。


38.3 实现 Top 10 支出排行榜

Python GUI 编程入门教程 第38章 记账本应用升级前10大额支出排行榜

在 BudgetApp 中新增:

def export_top10_expenses(self):    """导出Top 10大额支出排行榜"""    file_path = filedialog.asksaveasfilename(        defaultextension=".png",        filetypes=[("PNG 图片", "*.png")]    )    if not file_path:        return    # 获取支出数据    if self.role == "user":        self.cursor.execute("SELECT category, amount, date FROM records WHERE user_id=? AND type='支出' ORDER BY amount DESC LIMIT 10", (self.user_id,))    else:        self.cursor.execute("SELECT category, amount, date FROM records WHERE type='支出' ORDER BY amount DESC LIMIT 10")    rows = self.cursor.fetchall()    if not rows:        messagebox.showwarning("提示", "没有支出数据可导出图表")        return    # 转换为 DataFrame    df = pd.DataFrame(rows, columns=["category", "amount", "date"])    # 生成展示标签:类别+日期    df["label"] = df["category"] + " (" + df["date"] + ")"    # 绘制柱状图(横向,避免标签重叠)    fig, ax = plt.subplots(figsize=(8, 6))    ax.barh(df["label"], df["amount"], color="#f44336")    ax.set_title("Top 10 大额支出排行榜")    ax.set_xlabel("金额")    ax.invert_yaxis()  # 让最大支出显示在最上方    plt.tight_layout()    try:        plt.savefig(file_path)        plt.close(fig)        messagebox.showinfo("成功", f"Top 10 大额支出排行榜已导出到 {file_path}")    except Exception as e:        messagebox.showerror("错误", f"导出失败: {e}")

38.4 在界面中加入按钮

在 BudgetApp.__init__ 的操作按钮区增加:

tk.Button(frame_btn, text="导出Top10支出排行榜", command=self.export_top10_expenses).pack(side=tk.LEFT, padx=10)

38.5 功能演示

  1. 用户点击 “导出Top 10支出排行榜”
  2. 程序查询最大 10 笔支出,并生成柱状图
  3. 导出的 top10_expenses.png 图片:
  4. 横向柱状图,从最大金额到最小排序
  5. Y 轴:类别 + 日期(如 “购物 (2025-08-10)”)
  6. X 轴:金额
  7. 红色柱子强调支出
  8. 普通用户:仅展示个人 Top10
  9. 管理员:展示所有用户的 Top10

38.6 小结

  • 使用 横向柱状图 展示最大支出,更直观
  • 帮助用户快速识别异常支出或大额消费
  • 管理员可用于整体消费分析

发表评论

泰日号Copyright Your WebSite.Some Rights Reserved. 网站地图 备案号:川ICP备66666666号 Z-BlogPHP强力驱动