用Python做“电费计算.exe”,并保存数据到Excel

本文介绍了如何使用Python构建一个电费计算应用,该应用通过GUI获取用户输入,计算每户电费,并使用pyinstaller转换为.exe可执行文件。此外,还增加了将计算结果保存到Excel的功能,利用openpyxl库实现数据持久化。
摘要由CSDN通过智能技术生成

最近在外面租房准备考研,但是租房还得关系房租水电,一直手动算着好麻烦,就花几个小时做了一个计算电费的模型,现在只能依据每个用户的用电量和总电费计算每个人的电费并且显示出来。

记录了一下主要内容
1、计算每人需缴电费的函数(很简单的那种),总分费用=私人区域+公共区域
2、GUI布局,通过GUI文本输入框获取每户用电度数总费用,然后计算出每人应摊出的费用
3、用pyinstaller生成一个可执行的.exe文件,方便随时打开使用
4、最后一小节新增了用openpyxl写的一个操作Excel的程序用来存储数据

一、电费计算函数

一般的合租房都会有私人的小卧室和公共区域两个地方,卧室的电费自己承担而公共区域的钱一般需要AA:

# 分户计算方式,a,b,c是三个用户的用电量,m_s是总电费
def calculate(a, b, c, m_s):
    electricity_p = 0.49	# 电费单价
    m1 = electricity_p * a
    m2 = electricity_p * b
    m3 = electricity_p * c
    m_aver = (m_s - (m1 + m2 + m3)) / 3
    m1 = m1 + m_aver
    m2 = m2 + m_aver
    m3 = m3 + m_aver
    return m1, m2, m3

当然也可以根据自己的需要随时进行修改,GUI的主要计算也就是这一块了。

二、GUI布局&相关代码

最后希望用的就是这种有输入框和输出的GUI界面:最后想要的外观

程序主要使用tkinter制作GUI界面,所以使用的主要组件包括标签Label输入文本框Entry按键Button,除了这些还用到了字符串变量StringVar获取输入文本。

标签Label用来显示文字,输入文本框Entry用来输入数据,按键Button用来触发计算动作也可以用来触发清除文本框动作,通过place函数控制一下组件显示位置,就能得到上图的布局。

在原版本的基础上加了点东西,可以进行输入文本框的计算,输入文本框的数据要用空格分隔开,用户电量这一栏输入两个数据(无顺序要求)就能算出电量,本月共缴费这一栏输入所有充值的金额可以自动算出来总金额。

最后输入三户应各自缴费的费用,精度保留到小数点后两位。

其中按键按下触发,需要执行的响应程序那块儿,我把想用的响应逻辑函数直接放到了按键代码上,方便修改or阅读。

源代码如下:

import tkinter

# 分户计算方式,a,b,c是三个用户的用电量,m_s是总电费
def calculate(a, b, c, m_s):
    electricity = 0.49
    m1 = electricity * a
    m2 = electricity * b
    m3 = electricity * c
    m_aver = (m_s - (m1 + m2 + m3)) / 3
    m1 = m1 + m_aver - 2.2
    m2 = m2 + m_aver + 2.2
    m3 = m3 + m_aver
    return m1, m2, m3


# 输入文本框格式转换,string到float,支持空格分离数据
def sep_and_trans(string):
    s_list = string.split()
    f_list = []
    for i in range(len(s_list)):
        f_list.append(float(s_list[i]))
    return f_list


def gui_cre():
    # 创建主窗口
    root = tkinter.Tk()
    root.title("房租分摊费用")
    # 设置窗口大小
    root.geometry("400x170")

    # 设置输入标签组件
    labelName1 = tkinter.Label(root,
                               text='用户1用电: ',
                               justify=tkinter.RIGHT,
                               width=50)
    labelName1.place(x=10, y=10, width=80, heig
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值