用python写了一个简易的记账软件,后期有可能更新

本文介绍了作者如何用Python编写了一个记账程序,包含模块划分、数据写入(包括处理空值和新建/读取工作簿)、以及GUI图形化界面的设计。通过openpyxl处理Excel文件,实现便捷的消费记录和文件管理。
摘要由CSDN通过智能技术生成

记账程序由来

曾经在iOS14的快截指令中写了一个快捷指令用来记账,但是由于快捷指令的限制,只能把数据记录到备忘录或者numbers,数据的迁移性很差。所以最后干脆用python写了一个程序

程序介绍

模块

此程序用到的模块较少,内容如下,缺失的模块请自行安装:

  1. openpyxl:xlsx文件读写常用的模块。
  2. datetime:日期模块,用来获取你记账的时间。
  3. tkinter:图形化模块,用来制作可视化操作界面。
  4. os:自带模块,操作文件,无需安装。

数据写入

新建文件同时,在首行写入标题,并把datetime获取的时间字符串赋值给a;把消费类型赋值给b,消费金额赋值给c。然后用append把a,b,c的数值追加到工作簿中。由于日期字段过长,这里预先把日期列设置列宽为20。

zb = openpyxl.Workbook()
            xf = zb.active
            xf['A1'] = '日期'
            xf['B1'] = '消费类型'
            xf['C1'] = '消费金额'
            a = datetime.datetime.now()
            b = Entry1.get()
            c = Entry2.get()
            xf.append([a, b, c])
            xf.column_dimensions['A'].width = 20
            zb.save('个人账本.xlsx')

gui图形化界面

做了一个简单的界面,包括两个输入框加两个按钮。

jzr.title('记账本')
jzr.geometry('300x120+700+300')
label1 = Label(jzr, text='消费种类:', font=('微软雅黑', 10), fg='green')
label1.grid(row=0, column=0)
label2 = Label(jzr, text='消费金额:', font=('微软雅黑', 10), fg='green')
label2.grid(row=1, column=0)
Entry1 = Entry(jzr, font=('微软雅黑', 12), width=16)
Entry1.grid(row=0, column=1)
Entry2 = Entry(jzr, font=('微软雅黑', 12), width=16)
Entry2.grid(row=1, column=1)
Button1 = Button(jzr, text='写入数据', font=('微软雅黑', 10), width=8, command=jzcx)
Button1.grid(row=3, column=0, sticky=W)
Button2 = Button(jzr, text='退出', font=('微软雅黑', 10), width=8, command=jzr.quit)
Button2.grid(row=3, column=1, sticky=E)
jzr.mainloop()

关于输入空值

如果输入框没有填写数据,则不记录数据,这里使用了一个if函数。

if con1 == '':
        messagebox.showinfo('提示', message='请输入消费类型')
    elif con2 == '':
        messagebox.showinfo('提示', message='请输入消费金额')
    else:

新建工作簿

程序运行后,如果是首次运行,则会新建一个名为“个人账本”的工作簿,再写入数据;如果工作簿已存在,则读取并新增加数据。这里使用if结构,并且嵌套在上面的if判断语句中。

  else:
        if os.path.exists('个人账本.xlsx'):
            filepath = '个人账本.xlsx'
            zb = openpyxl.load_workbook(filepath)
            xf = zb.active
            a = datetime.datetime.now()
            b = Entry1.get()
            c = Entry2.get()
            xf.append([a, b, c])
            xf.column_dimensions['A'].width = 20
            zb.save('个人账本.xlsx')
            messagebox.showinfo('提示', message='消费数据已记录完成')
            jzr.quit()
        else:
            zb = openpyxl.Workbook()
            xf = zb.active
            xf['A1'] = '日期'
            xf['B1'] = '消费类型'
            xf['C1'] = '消费金额'
            a = datetime.datetime.now()
            b = Entry1.get()
            c = Entry2.get()
            xf.append([a, b, c])
            xf.column_dimensions['A'].width = 20
            zb.save('个人账本.xlsx')
            messagebox.showinfo('提示', message='消费数据已记录完成')
            jzr.quit()

完整代码

import openpyxl
from openpyxl import Workbook
import datetime
from tkinter import messagebox
from tkinter import *
import os


jzr = Tk()


jzr.title('记账本')
jzr.geometry('300x120+700+300')
label1 = Label(jzr, text='消费种类:', font=('微软雅黑', 10), fg='green')
label1.grid(row=0, column=0)
label2 = Label(jzr, text='消费金额:', font=('微软雅黑', 10), fg='green')
label2.grid(row=1, column=0)
Entry1 = Entry(jzr, font=('微软雅黑', 12), width=16)
Entry1.grid(row=0, column=1)
Entry2 = Entry(jzr, font=('微软雅黑', 12), width=16)
Entry2.grid(row=1, column=1)


def jzcx():
    con1 = Entry1.get()
    con1 = con1.strip()
    con2 = Entry2.get()
    con2 = con2.strip()
    if con1 == '':
        messagebox.showinfo('提示', message='请输入消费类型')
    elif con2 == '':
        messagebox.showinfo('提示', message='请输入消费金额')
    else:
        if os.path.exists('个人账本.xlsx'):
            filepath = '个人账本.xlsx'
            zb = openpyxl.load_workbook(filepath)
            xf = zb.active
            a = datetime.datetime.now()
            b = Entry1.get()
            c = Entry2.get()
            xf.append([a, b, c])
            xf.column_dimensions['A'].width = 20
            zb.save('个人账本.xlsx')
            messagebox.showinfo('提示', message='消费数据已记录完成')
            jzr.quit()
        else:
            zb = openpyxl.Workbook()
            xf = zb.active
            xf['A1'] = '日期'
            xf['B1'] = '消费类型'
            xf['C1'] = '消费金额'
            a = datetime.datetime.now()
            b = Entry1.get()
            c = Entry2.get()
            xf.append([a, b, c])
            xf.column_dimensions['A'].width = 20
            zb.save('个人账本.xlsx')
            messagebox.showinfo('提示', message='消费数据已记录完成')
            jzr.quit()


Button1 = Button(jzr, text='写入数据', font=('微软雅黑', 10), width=8, command=jzcx)
Button1.grid(row=3, column=0, sticky=W)
Button2 = Button(jzr, text='退出', font=('微软雅黑', 10), width=8, command=jzr.quit)
Button2.grid(row=3, column=1, sticky=E)
jzr.mainloop()

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值