首页 游戏天地文章正文

Python GUI 编程入门教程 第39章:记账本应用升级——预算提醒功能

游戏天地 2025年09月05日 12:29 1 admin

39.1 项目目标

  1. 新增 预算设定与保存 功能
  2. 每次新增支出后,系统自动检查是否超出当月预算
  3. 超支时弹出警告提示,帮助用户合理控制消费

39.2 数据库设计

在 users 表中新增一列 budget,存储每个用户的月度预算(默认 NULL 表示未设置):

ALTER TABLE users ADD COLUMN budget REAL;

39.3 实现预算设置

Python GUI 编程入门教程 第39章:记账本应用升级——预算提醒功能

在用户登录后界面(BudgetApp)增加一个 “设置预算” 按钮,用户可以输入月度预算金额:

def set_budget(self):    """设置月度预算"""    budget = simpledialog.askfloat("设置预算", "请输入您的月度预算金额:")    if budget is not None and budget > 0:        self.cursor.execute("UPDATE users SET budget=? WHERE id=?", (budget, self.user_id))        self.conn.commit()        messagebox.showinfo("成功", f"预算已设置为 {budget:.2f}")

在按钮区增加:

tk.Button(frame_btn, text="设置预算", command=self.set_budget).pack(side=tk.LEFT, padx=10)

39.4 实现超支检测

在新增支出时调用检测逻辑:

def check_budget(self):    """检查是否超支"""    # 获取当前用户预算    self.cursor.execute("SELECT budget FROM users WHERE id=?", (self.user_id,))    budget = self.cursor.fetchone()[0]    if budget is None:        return  # 未设置预算则跳过    # 计算本月支出    today = datetime.now()    start_month = today.replace(day=1).strftime("%Y-%m-%d")    self.cursor.execute(        "SELECT SUM(amount) FROM records WHERE user_id=? AND type='支出' AND date>=?",        (self.user_id, start_month)    )    total_expenses = self.cursor.fetchone()[0] or 0    # 判断是否超支    if total_expenses > budget:        messagebox.showwarning("预算提醒", f"本月支出 {total_expenses:.2f} 已超出预算 {budget:.2f}!")

然后在 add_record() 方法的末尾调用:

if record_type == "支出":    self.check_budget()

39.5 功能演示

  1. 用户点击 “设置预算” 输入 5000 元
  2. 每次新增支出时,程序会自动累计当月消费总额
  3. 当消费总额超过 5000 元时,弹出警告:
  4. “本月支出 5200.00 已超出预算 5000.00!”
  5. 用户可重新设置预算

39.6 小结

  • 预算功能帮助用户更好地进行消费控制
  • 支持动态修改预算
  • 超支即时提醒,避免“月末才发现没钱了”

发表评论

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