文章目录

  • Python房贷计算器GUI
    • 1.项目简介
    • 2.代码
    • 3.打包成.exe文件

Python房贷计算器GUI

1.项目简介

使用Pycharm写的房贷计算器GUI,计算两种还款方式(等额本息,等额本金)对比,使用工具如下: 
  Pycharm 2019.3.0
  Python中的tkinter库
GUI界面如下:

源代码及生成的.exe文件

2.代码

from tkinter import *class Calculator:def __init__(self):window = Tk()  # 建立窗口window.title("房贷计算器")  # 命名窗口标题# 定义StringVar对象动态存储输入框的值self.amountVar = StringVar()  # 贷款金额self.rateVar = StringVar()  # 年化利率self.yearsVar = StringVar()  # 贷款年限self.monthsVar = StringVar()  # 已还期数self.monthVar = StringVar()  # 第i月self.total_1Var = StringVar()  # 等额本息总还款额self.totalInterest_1Var = StringVar()  # 等额本息总利息self.totalRepayment_1Var = StringVar()  # 等额本息累计已还self.remain_1Var = StringVar()  # 等额本息待还金额self.monthRepayment_1Var = StringVar()  # 等额本息第i月应还self.total_2Var = StringVar()  # 等额本金总还款额self.totalInterest_2Var = StringVar()  # 等额本金总利息self.totalRepayment_2Var = StringVar()  # 等额本金累计已还self.remain_2Var = StringVar()  # 等额本金待还金额self.monthRepayment_2Var = StringVar()  # 等额本金第i月应还# 设置一些默认值self.monthsVar.set("0")self.monthVar.set('1')# 整体面板,设置总体的边距frame = Frame(window)frame.pack(padx=20, pady=20)"""添加标签.grid(row, column)设置标签位置"""Label(frame, text="贷款金额").grid(row=1, column=1, columnspan=3)Label(frame, text="年化利率").grid(row=2, column=1, columnspan=3)Label(frame, text="贷款年限").grid(row=3, column=1, columnspan=3)Label(frame, text="已还期数").grid(row=4, column=1, columnspan=3)Label(frame, text="总还款额").grid(row=7, column=1, columnspan=3)Label(frame, text="总利息额").grid(row=8, column=1, columnspan=3)Label(frame, text="累计已还").grid(row=9, column=1, columnspan=3)Label(frame, text="剩余待还").grid(row=10, column=1, columnspan=3)Label(frame, text="第").grid(row=11, column=1)Label(frame, text="月应还").grid(row=11, column=3)"""添加输入和输出框textvariable = self.amountVar 由相应的StringVar对象动态保存输入框中的文本justify=RIGHT 输入框中的文本右对齐sticky=E 控件在单元格中右对齐"""Entry(frame, justify=RIGHT, textvariable=self.amountVar).grid(row=1, column=4)Entry(frame, justify=RIGHT, textvariable=self.rateVar).grid(row=2, column=4)Entry(frame, justify=RIGHT, textvariable=self.yearsVar).grid(row=3, column=4)Entry(frame, justify=RIGHT, textvariable=self.monthsVar).grid(row=4, column=4)Entry(frame, width=4, justify=CENTER, textvariable=self.monthVar).grid(row=11, column=2)Label(frame, textvariable=self.total_1Var).grid(row=7, column=4, sticky=E)Label(frame, textvariable=self.total_2Var).grid(row=7, column=6, sticky=E)Label(frame, textvariable=self.totalInterest_1Var).grid(row=8, column=4, sticky=E)Label(frame, textvariable=self.totalInterest_2Var).grid(row=8, column=6, sticky=E)Label(frame, textvariable=self.totalRepayment_1Var).grid(row=9, column=4, sticky=E)Label(frame, textvariable=self.totalRepayment_2Var).grid(row=9, column=6, sticky=E)Label(frame, textvariable=self.remain_1Var).grid(row=10, column=4, sticky=E)Label(frame, textvariable=self.remain_2Var).grid(row=10, column=6, sticky=E)Label(frame, textvariable=self.monthRepayment_1Var).grid(row=11, column=4, sticky=E)Label(frame, textvariable=self.monthRepayment_2Var).grid(row=11, column=6, sticky=E)# 添加Message存储单位Message(frame, text="元").grid(row=1, column=5)Message(frame, text="%").grid(row=2, column=5)Message(frame, text="年").grid(row=3, column=5)Message(frame, text="月").grid(row=4, column=5)Message(frame, text="元").grid(row=7, column=5)Message(frame, text="元").grid(row=7, column=7)Message(frame, text="元").grid(row=8, column=5)Message(frame, text="元").grid(row=8, column=7)Message(frame, text="元").grid(row=9, column=5)Message(frame, text="元").grid(row=9, column=7)Message(frame, text="元").grid(row=10, column=5)Message(frame, text="元").grid(row=10, column=7)Message(frame, text="元").grid(row=11, column=5)Message(frame, text="元").grid(row=11, column=7)# 空Frame以撑开空间Frame(frame, height=10).grid(row=5, column=4, columnspan=7)# 按钮,事件监听函数为calculateButton(frame, width=19, text="等额本息", command=self.calculate_1).grid(row=6, column=4, columnspan=1, pady=0)Button(frame, width=19, text="等额本金", command=self.calculate_2).grid(row=6, column=6, columnspan=1, pady=0)# 消息循环window.mainloop()# 按钮点击监听def calculate_1(self):"""等额本息法计算函数"""# 获取输入的参数amount = eval(self.amountVar.get())rate = eval(self.rateVar.get()) / 100 / 12  # 将年化利率转为月利率,单位为1years = eval(self.yearsVar.get())months = eval(self.monthsVar.get())month = eval(self.monthVar.get())# 计算每月还款monthRepayment = amount * rate * ((1 + rate ) ** (years * 12)) / ((1 + rate ) ** (years * 12) - 1)# 将计算结果设置给控件total = monthRepayment * 12 * years  # 总还款金额self.total_1Var.set(format(total, ".3f"))totalInterest = total - amount  # 总利息self.totalInterest_1Var.set(format(totalInterest, '.3f'))if (months >= 0) and (months <= years * 12):  # 已还期数必须在贷款期数内totalRepayment = monthRepayment * months  # 已还金额remain = total - totalRepayment  # 剩余待还金额self.totalRepayment_1Var.set(format(totalRepayment, '.3f'))self.remain_1Var.set(format(remain, '.3f'))else:self.totalRepayment_1Var.set('已还期数输入有误!')self.remain_1Var.set('已还期数输入有误!')if (month >= 1) and (month <= years * 12):self.monthRepayment_1Var.set(format(monthRepayment, '.3f'))else:self.monthRepayment_1Var.set('第_月份输入有误!')def calculate_2(self):"""等额本金法计算函数"""# 获取输入的参数amount = eval(self.amountVar.get())rate = eval(self.rateVar.get()) / 100 / 12  # 将年化利率转为月利率,单位为1years = eval(self.yearsVar.get())months = eval(self.monthsVar.get())month = eval(self.monthVar.get())month_amount = amount / (years * 12)# 存储每月还款monthRepayment = []for i in range(1, (years * 12) + 1):monthpayment = month_amount + (amount - (i - 1) * month_amount) * ratemonthRepayment.append(monthpayment)# 将计算结果设置给控件total = sum(monthRepayment)self.total_2Var.set(format(total, ".3f"))totalInterest = total - amountself.totalInterest_2Var.set(format(totalInterest, '.3f'))if (months >= 0) and (months <= years * 12):totalRepayment = sum(monthRepayment[:months])remain = total - totalRepaymentself.totalRepayment_2Var.set(format(totalRepayment, '.3f'))self.remain_2Var.set(format(remain, '.3f'))else:self.totalRepayment_2Var.set('已还期数输入有误!')self.remain_2Var.set('已还期数输入有误!')if (month >= 1) and (month <= years * 12):self.monthRepayment_2Var.set(format(monthRepayment[month - 1], '.3f'))else:self.monthRepayment_2Var.set('第_月份输入有误!')if __name__ == '__main__':Calculator()pass

3.打包成.exe文件

直接在Pycharm运行代码即可,也可以选择打包成电脑软件.exe文件,使用pyinstaller
库。
可以直接pip安装,但可能会遇到安装速度较慢,这里使用清华镜像源,代码如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

将电脑终端路径切换到Calculator.py文件的目录下,输入:

pyinstaller -F -w Calculator.py


此时,文件夹下面会新增两个文件夹,双击dist文件夹下的Calculator.exe文件即可运行,相应的Calculator.py文件就不需要了!

Python房贷计算器GUI(等额本息,等额本金)相关推荐

  1. LPR/IRR/APR/PMT/PV/FV区分,excel中PMT/PV/FV运用,等额本息/等额本金excel计算器

    一.IRR/ARR,PV/NPV/FV.PMT/PPMT/IPMT.LPR基础含义 1.LPR.IRR/ARR/EAR.APR. (1)LPR 英文释义 Loan Prime Rate,指贷款市场报价 ...

  2. 房贷还款方式等额本息等额本金比较和这两种提前还款的区别

    计算规则数据:贷款总额80万,年限30年,商贷利率5.44 (实际5.4%先按5.44模拟计算) 等额本息: 每月还款:4512.24元 利息总额82.44万元 还款总额:162.44万元 月供总额不 ...

  3. 购房贷款 等额本息 等额本金

    购房贷款主要有两种方式:等额本息贷款和等额本金贷款.这两种方式最大的不同在于计算利息的方式不同.前者采用的是复合方式计算利息(即本金和利息都要产生利息),后者采用简单方式计算利息(即只有本金产生利息) ...

  4. 房贷利率有无套路?Python解读“等额本金与等额本息”的差异所在

    作者 | xiaoyu 来源 | Python数据科学 很多朋友留言说不知道房贷利率的不同归还方式是不是有套路,内心深表疑虑.我的第一反应是因为房贷很高,大家看到消费分期的套路自然而然就想到了房贷,很 ...

  5. python等额本息和等额本金_用Python解读房贷利率,要不要看随你

    可能很多买过房.贷过款的朋友大概都知道怎么回事,但是我相信大部分人也没细研究过,而绝大部分人买房时更是任由房屋中介摆布,因为给了中介费相信他们可以算的明明白白,自己也就不过多深究了.但我觉得买房不是小 ...

  6. 用python实现等额本息

    Python实现等额本息 1.等额本息 等额本息下,每个月还款的本金+利息的总额是相等的,或者说,用户还款时只知道每个月还款额相等,并不关心还了多少本金和利息.这种还款方式同样适用于收入稳定的人群. ...

  7. 房贷中的等额本息和等额本金有什么区别?

    众所周知房贷有两种还款方式,一种是等额本息,另一种是等额本金.顾名思义,等额本息的意思就是说每期还款的本金和利息是相同的,等额本金就是说每期还款的本金是一样的,而利息是依次递减.下面我们通过一个例子来 ...

  8. uniapp 做的一个房贷计算器

    在支付宝的文档中找到一个比较详细的公式 等额本息计算公式 每月还款额=贷款本金×[月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1]总支付利息:总利息=还款月数×每月月供额-贷款本金 ...

  9. Java实现等额本息

    import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Calendar; import ja ...

  10. 贷款买房,利息怎么算?等额本金与等额本息

    一.房屋贷款 公积金贷款或商业贷款 1, 年化利率6% 月利率为0.5% 2, 贷款12万元 1年还清 12期 3,错误的算法,利息:12万元*6%=0.72万元 二.等额本金 1, 本金:12万元/ ...

最新文章

  1. android+高仿视频录制,android高仿微信视频编辑页
  2. swift 网络请求中含有特殊字符的解决方案
  3. jsoncpp和rapidjson哪个好用?
  4. AndroidStudio JNI: 使用CMake编译tensorflow
  5. html中引入调用另一个公用html模板文件的方法
  6. 【C/C++】理解传值引用和调用引用:函数调用中,为变量赋值,传入其指针;为指针赋值,传入指针的指针
  7. 《高等数学》练习题库含答案(大学期末复习资料)
  8. 编码的奥秘:自动操作
  9. QThread如何优雅实现暂停(挂起)功能
  10. AHCI和IDE的区别,如何在AHCI模式下安装系统
  11. 两高一部电子数据取证规则_“鼓浪听涛,论道取证”2019中国电子数据取证峰会在厦门召开,行业专家齐聚...
  12. Dataframe print 省略号问题
  13. [毕业生的商业软件开发之路]积累与创新
  14. 大白菜Ghost备份还原系统-人人都会重装系统
  15. fly.js 的二次封装
  16. 谷歌浏览器导出导入插件
  17. python海龟绘图,简单的坐标系问题
  18. Vue核心⑨(数据监测原理)
  19. 2019年数学建模A题 高压油管的压力控制
  20. 短视频批量伪原创破解 苹果手机md5视频修改工具下载

热门文章

  1. Mysql 创建数据库\添加用户\用户授权
  2. Error Domain=AVFoundationErrorDomain Code=-11841 (null) timeRange 和 duration 不一致
  3. python scipy拟合曲线optimize.curve_fit 50例
  4. 使用github下载项目压缩包,打开前端项目加载依赖报错。
  5. 毛笔字软件测试简历,写字测试
  6. sprintboot验证码kaptcha 自定义图片样式
  7. 图解数据分析(4) | 核心步骤1 - 业务认知与数据初探(数据科学家入门·完结)
  8. 针孔相机模型和相机内参矩阵K
  9. 计算机网络总结篇-我们是怎么访问百度的?
  10. 系统分析员到底做什么?