python桌面应用项目:记账本 之PySimpleGUI模块的应用

项目分析

  • 开发准备:pycharm、json模块、datetime模块、PySimpleGUI模块
  • 数据保存:利用Json文件保存账目数据(这里不使用数据库的话,数据太过简单,牛刀小用)
  • 编写步骤:
  • 1.建立数据文件 2.读取数据函数 3.读写数据函数 4.编写界面(最后)
  • 5.账单显示函数 6.总收入计算函数 7.总支出计算函数 8.增加账目函数
  • 9.结合界面调用函数实现项目内容

编写步骤

1.建立数据文件

# -*- codeing = utf-8 -*-
# @Time :2022/5/16
# @Author :季白九月
# @File :记账本.py
# @Software: PyCharm
import json
import datetime
import PySimpleGUI
d = '[{"时间":"2022/05/16 19:13:22","项目":"收到货款","金额":20000,"分类":"收入"}]'
with open(r"data.txt","w") as f:
    f.write(d)

在这里插入图片描述

2.读取数据函数

def readData():     #读取数据函数
    with open(r"data.txt", "r") as f:
        jsonData = f.read()
        dataList = json.loads(jsonData) #读取文件里面的数据
        return dataList

3.读写数据函数

def writeData(dateList):       ##写数据函数
    jsonData = json.dumps(dateList,ensure_ascii=False) #数据里有汉字,确保不会更改编码格式
    with open(r"data.txt", "w") as f:
        jsonData = f.write(jsonData)
        sg.popup('账单录入成功')          #弹窗

4.账单显示函数

def showData():
    data = readData()
    dataLists =[]
    for d in data:
        if d["分类"] == "收入": #判断是支出还是收入?
            dataList = [d["时间"],d["项目"],d["金额"],d["分类"]]
            dataLists.append(dataList)
        else:
            dataList = [d["时间"], d["项目"], d["金额"]*-1, d["分类"]]
            dataLists.append(dataList)
    return dataLists

5.总收入计算函数

def sumin():            #总收入计算函数
    sumin= 0
    data = readData()
    for a in data:
        if a["分类"]=="收入":
            sumin+=a["金额"]
    return sumin

6.总支出计算函数

def sumout():            #总支出计算函数
    sumout= 0
    data = readData()
    for a in data:
        if a["分类"]=="支出":
            sumout+=a["金额"]
    return sumout

7.增加账目函数

def addData(项目,金额,分类): #增加账目函数
    dataList = readData()
    t = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%s")   #获取系统时间,并规定格式
    data = {"":t,"":项目,"":金额,"":分类}
    dataList.append(data)
    writeData(dataList)

8.编写界面(最后)

def main():
    list = showData()
    layout = [
        [sg.T("账目清单:")],
        [sg.Table(list,headings=["时间","项目","金额","分类"],
                  key = "-show-",
                  justification="c",
                  auto_size_columns=False,          #设置显示 列宽参数
                  def_col_width=15
                  )],
        [sg.T("总收入多少钱,总支出多少元,结余多少元")],
        [sg.T("请输入账单项目:"),sg.In()],
        [sg.T("请输入账单金额:"),sg.In()],
        [sg.T("请选择账单分类:")]+[sg.Radio(i,group_id=1,key=i)for i in ["收入","支出"]],
        [sg.B("确认提交")]
    ]
    window = sg.Window("记账本",layout)
    while True:
        event,values = window.read()
        if event == None:
            break
    window.close()

在这里插入图片描述

9.结合界面调用函数实现项目内容

更新收入、支出、结余动态更新,在主函数中,其中有一些PySimpleGUI图形界面的编程知识,我也是刚入门,同有许多不懂的地方,尽量多做注释,方便理解

def main():
    list = showData()
    sin = sumin()
    sout = sumout()
    layout = [
        [sg.T("账目清单:")],
        [sg.Table(list,headings=["时间","项目","金额","分类"],
                  key = "-show-",
                  justification="c",
                  auto_size_columns=False,          #设置显示 列宽参数
                  def_col_width=15
                  )],
        [sg.T("总收入"+str(sin)+"钱,总支出"+str(sout)+"元,结余"+str(sin-sout)+"元",key = "-text-")],
        [sg.T("请输入账单项目:"),sg.In(key="-项目-")],
        [sg.T("请输入账单金额:"),sg.In(key="-金额-")],
        [sg.T("请选择账单分类:")]+[sg.Radio(i,group_id=1,key=i)for i in ["收入","支出"]],
        [sg.B("确认提交")]
    ]
    window = sg.Window("记账本",layout)
    while True:
        event,values = window.read()
        if event =="确认提交":
            项目 = values["-项目-"]
            金额 = float(values["-金额-"])
            for k,v in values.items(): #遍历单选框的键和值
                if v==True:
                    分类=k
                    addData(项目,金额,分类)
                    list = showData()
                    sin = sumin()
                    sout = sumout()
                    text = "总收入"+str(sin)+"钱,总支出"+str(sout)+"元,结余"+str(sin-sout)+"元"
                    window["-show-"].update(values=list) #显示在 目录上
                    window["-text-"].update(value=text) #重新显示 "总收入"+str(sin)+"钱,总支出"+str(sout)+"元,结余"+str(sin-sout)+"元"
                    window["-项目-"].update("")
                    window["-金额-"].update("") # 将文本框更新 为空,方便再次输入
        if event == None:
            break
    window.close()
if __name__ == '__main__':
    main()

在这里插入图片描述

在这里插入图片描述
至此,这个桌面程序就完成了!

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值