当前位置:   article > 正文

Python房贷计算器GUI(等额本息,等额本金)_python等额本息的代码

python等额本息的代码

1. 源码

  1. from tkinter import *
  2. class Calculator:
  3.     def __init__(self):
  4.         window = Tk()  # 建立窗口
  5.         window.title("房贷计算器")  # 命名窗口标题
  6.         # 定义StringVar对象动态存储输入框的值
  7.         self.amountVar = StringVar()  # 贷款金额
  8.         self.rateVar = StringVar()  # 年化利率
  9.         self.yearsVar = StringVar()  # 贷款年限
  10.         self.monthsVar = StringVar()  # 已还期数
  11.         self.monthVar = StringVar()  # 第i月
  12.         self.total_1Var = StringVar()  # 等额本息总还款额
  13.         self.totalInterest_1Var = StringVar()  # 等额本息总利息
  14.         self.totalRepayment_1Var = StringVar()  # 等额本息累计已还
  15.         self.remain_1Var = StringVar()  # 等额本息待还金额
  16.         self.monthRepayment_1Var = StringVar()  # 等额本息第i月应还
  17.         self.total_2Var = StringVar()  # 等额本金总还款额
  18.         self.totalInterest_2Var = StringVar()  # 等额本金总利息
  19.         self.totalRepayment_2Var = StringVar()  # 等额本金累计已还
  20.         self.remain_2Var = StringVar()  # 等额本金待还金额
  21.         self.monthRepayment_2Var = StringVar()  # 等额本金第i月应还
  22.         # 设置一些默认值
  23.         self.monthsVar.set("0")
  24.         self.monthVar.set('1')
  25.         # 整体面板,设置总体的边距
  26.         frame = Frame(window)
  27.         frame.pack(padx=20, pady=20)
  28.         """
  29.         添加标签
  30.         .grid(row, column)设置标签位置
  31.         """
  32.         Label(frame, text="贷款金额").grid(row=1, column=1, columnspan=3)
  33.         Label(frame, text="年化利率").grid(row=2, column=1, columnspan=3)
  34.         Label(frame, text="贷款年限").grid(row=3, column=1, columnspan=3)
  35.         Label(frame, text="已还期数").grid(row=4, column=1, columnspan=3)
  36.         Label(frame, text="总还款额").grid(row=7, column=1, columnspan=3)
  37.         Label(frame, text="总利息额").grid(row=8, column=1, columnspan=3)
  38.         Label(frame, text="累计已还").grid(row=9, column=1, columnspan=3)
  39.         Label(frame, text="剩余待还").grid(row=10, column=1, columnspan=3)
  40.         Label(frame, text="第").grid(row=11, column=1)
  41.         Label(frame, text="月应还").grid(row=11, column=3)
  42.         """
  43.         添加输入和输出框
  44.         textvariable = self.amountVar 由相应的StringVar对象动态保存输入框中的文本
  45.         justify=RIGHT 输入框中的文本右对齐
  46.         sticky=E 控件在单元格中右对齐
  47.         """
  48.         Entry(frame, justify=RIGHT, textvariable=self.amountVar).grid(row=1, column=4)
  49.         Entry(frame, justify=RIGHT, textvariable=self.rateVar).grid(row=2, column=4)
  50.         Entry(frame, justify=RIGHT, textvariable=self.yearsVar).grid(row=3, column=4)
  51.         Entry(frame, justify=RIGHT, textvariable=self.monthsVar).grid(row=4, column=4)
  52.         Entry(frame, width=4, justify=CENTER, textvariable=self.monthVar).grid(row=11, column=2)
  53.         Label(frame, textvariable=self.total_1Var).grid(row=7, column=4, sticky=E)
  54.         Label(frame, textvariable=self.total_2Var).grid(row=7, column=6, sticky=E)
  55.         Label(frame, textvariable=self.totalInterest_1Var).grid(row=8, column=4, sticky=E)
  56.         Label(frame, textvariable=self.totalInterest_2Var).grid(row=8, column=6, sticky=E)
  57.         Label(frame, textvariable=self.totalRepayment_1Var).grid(row=9, column=4, sticky=E)
  58.         Label(frame, textvariable=self.totalRepayment_2Var).grid(row=9, column=6, sticky=E)
  59.         Label(frame, textvariable=self.remain_1Var).grid(row=10, column=4, sticky=E)
  60.         Label(frame, textvariable=self.remain_2Var).grid(row=10, column=6, sticky=E)
  61.         Label(frame, textvariable=self.monthRepayment_1Var).grid(row=11, column=4, sticky=E)
  62.         Label(frame, textvariable=self.monthRepayment_2Var).grid(row=11, column=6, sticky=E)
  63.         # 添加Message存储单位
  64.         Message(frame, text="元").grid(row=1, column=5)
  65.         Message(frame, text="%").grid(row=2, column=5)
  66.         Message(frame, text="年").grid(row=3, column=5)
  67.         Message(frame, text="月").grid(row=4, column=5)
  68.         Message(frame, text="元").grid(row=7, column=5)
  69.         Message(frame, text="元").grid(row=7, column=7)
  70.         Message(frame, text="元").grid(row=8, column=5)
  71.         Message(frame, text="元").grid(row=8, column=7)
  72.         Message(frame, text="元").grid(row=9, column=5)
  73.         Message(frame, text="元").grid(row=9, column=7)
  74.         Message(frame, text="元").grid(row=10, column=5)
  75.         Message(frame, text="元").grid(row=10, column=7)
  76.         Message(frame, text="元").grid(row=11, column=5)
  77.         Message(frame, text="元").grid(row=11, column=7)
  78.         # 空Frame以撑开空间
  79.         Frame(frame, height=10).grid(row=5, column=4, columnspan=7)
  80.         # 按钮,事件监听函数为calculate
  81.         Button(frame, width=19, text="等额本息", command=self.calculate_1).grid(row=6, column=4, columnspan=1, pady=0)
  82.         Button(frame, width=19, text="等额本金", command=self.calculate_2).grid(row=6, column=6, columnspan=1, pady=0)
  83.         # 消息循环
  84.         window.mainloop()
  85.     # 按钮点击监听
  86.     def calculate_1(self):
  87.         """
  88.         等额本息法计算函数
  89.         """
  90.         # 获取输入的参数
  91.         amount = eval(self.amountVar.get())
  92.         rate = eval(self.rateVar.get()) / 100 / 12  # 将年化利率转为月利率,单位为1
  93.         years = eval(self.yearsVar.get())
  94.         months = eval(self.monthsVar.get())
  95.         month = eval(self.monthVar.get())
  96.         # 计算每月还款
  97.         monthRepayment = amount * rate * ((1 + rate ) ** (years * 12)) / ((1 + rate ) ** (years * 12) - 1)
  98.         # 将计算结果设置给控件
  99.         total = monthRepayment * 12 * years  # 总还款金额
  100.         self.total_1Var.set(format(total, ".3f"))
  101.         totalInterest = total - amount  # 总利息
  102.         self.totalInterest_1Var.set(format(totalInterest, '.3f'))
  103.         if (months >= 0and (months <= years * 12):  # 已还期数必须在贷款期数内
  104.             totalRepayment = monthRepayment * months  # 已还金额
  105.             remain = total - totalRepayment  # 剩余待还金额
  106.             self.totalRepayment_1Var.set(format(totalRepayment, '.3f'))
  107.             self.remain_1Var.set(format(remain, '.3f'))
  108.         else:
  109.             self.totalRepayment_1Var.set('已还期数输入有误!')
  110.             self.remain_1Var.set('已还期数输入有误!')
  111.         if (month >= 1and (month <= years * 12):
  112.             self.monthRepayment_1Var.set(format(monthRepayment, '.3f'))
  113.         else:
  114.             self.monthRepayment_1Var.set('第_月份输入有误!')
  115.     def calculate_2(self):
  116.         """
  117.         等额本金法计算函数
  118.         """
  119.         # 获取输入的参数
  120.         amount = eval(self.amountVar.get())
  121.         rate = eval(self.rateVar.get()) / 100 / 12  # 将年化利率转为月利率,单位为1
  122.         years = eval(self.yearsVar.get())
  123.         months = eval(self.monthsVar.get())
  124.         month = eval(self.monthVar.get())
  125.         month_amount = amount / (years * 12)
  126.         # 存储每月还款
  127.         monthRepayment = []
  128.         for i in range(1, (years * 12) + 1):
  129.             monthpayment = month_amount + (amount - (i - 1) * month_amount) * rate
  130.             monthRepayment.append(monthpayment)
  131.         # 将计算结果设置给控件
  132.         total = sum(monthRepayment)
  133.         self.total_2Var.set(format(total, ".3f"))
  134.         totalInterest = total - amount
  135.         self.totalInterest_2Var.set(format(totalInterest, '.3f'))
  136.         if (months >= 0and (months <= years * 12):
  137.             totalRepayment = sum(monthRepayment[:months])
  138.             remain = total - totalRepayment
  139.             self.totalRepayment_2Var.set(format(totalRepayment, '.3f'))
  140.             self.remain_2Var.set(format(remain, '.3f'))
  141.         else:
  142.             self.totalRepayment_2Var.set('已还期数输入有误!')
  143.             self.remain_2Var.set('已还期数输入有误!')
  144.         if (month >= 1and (month <= years * 12):
  145.             self.monthRepayment_2Var.set(format(monthRepayment[month - 1], '.3f'))
  146.         else:
  147.             self.monthRepayment_2Var.set('第_月份输入有误!')
  148. if __name__ == '__main__':
  149.     Calculator()
  150.     pass

2. 运行结果

88-1房贷计算器

运行上面的代码可以得到上图这样的一个房贷计算器。

房贷计算器GUI

源码来源于网络,如有侵权,联系删除!

今天在网上发现了上面的宝藏代码。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/250798
推荐阅读
相关标签
  

闽ICP备14008679号