在后台回复【阅读书籍】
即可获取python相关电子书~
Hi,我是山月。
不知道大家生活里有没有用过个人贷款计算器。现在网上有很多这方面的在线工具,挺方便的,比如招商银行官网里:
👆官网:http://www.cmbchina.com/CmbWebPubInfo/Cal_Loan_Per.aspx?chnl=dkjsq
其实它的原理很简单,加之,基础的tkinter知识山月已经介绍过了👉:初识Tkinter:一些必须掌握的基础知识。
因此,山月就想着把它当成一个小的实战项目来巩固一下知识,顺便检验下学习成果。
如果对GUI界面有兴趣的小伙伴可以一起来学习哦~
效果👇(文末提供源代码):
01
原理
实现的基本原理是通过贷款金额、贷款年限、贷款利率来得出每月需要还多少钱,本息一共是多少。
当然,有两种选择方式来还款:等额本金和等额本息。
这里不说两种还款方式的优劣,只说两种还款方式的每月还款金额计算的差异。
等额本息还款计算:
每月还款额 = 贷款本金×[月利率×(1+月利率) ^ 还款月数]÷{[(1+月利率) ^ 还款月数]-1}
等额本金还款计算:
每月还款额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率。
现在原理我们知道的差不多了,我们来设计下我们的框架:
获取贷款金额、贷款年限、贷款利率
点击计算,出现两种还款方式的结果:每月还款金额、总支付利息、本息合计
为了重复计算,设置个重置功能,把输入的值和产生的值删除掉
下面我们开始来看看吧。
02
实现目标
1、界面构建
我们来构建下我们的计算界面吧:
这些都是些基础的组件摆放,我们直接来看实现的代码:
代码较长,为不影响观看,以图片格式摆放,如果需要源代码,在后台回复【贷款计算器】即可获取。
2、函数说明
目前的三个按钮【计算】、【重置】、【点击查看】点击了都没有反应,因为我们还没绑定对应的函数。
现在我们来完善函数的内容。
1) 函数count
由于有很多数据要处理,所以我们先构建个函数count来处理一些数据。
由于等额本金还款方式的已归还本金累计额不方便直接计算,所以这部分在后面再进行计算。
# 所有数据计算
def count(self):
self.Loan_money = int(self.Entry_money.get()) # 获取输入的贷款本金
self.Loan_term = int(self.Entry_term.get()) # 获取输入的贷款年限
self.Loan_rate = float(self.Entry_rate.get()) # 获取输入的贷款年利率
self.Loan_term_month = self.Loan_term*12 # 把贷款年限的单位由年转换成月
self.Loan_rate_month = self.Loan_rate/100/12 # 把年利率转换成月利率
'''
等额本息还款法:
每月还款额 = 贷款本金×[月利率×(1+月利率) ^ 还款月数]÷{[(1+月利率) ^ 还款月数]-1}
等额本金还款:
每月还款额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率。
'''
# 计算等额本息法每月还款金额
self.repayment_months_money = self.Loan_money*self.Loan_rate_month*pow((1+self.Loan_rate_month),self.Loan_term_month)/(pow((1+self.Loan_rate_month),self.Loan_term_month)-1)
self.repayment_months_money_2 = round(self.repayment_months_money,2)
# 计算等额本息法总共要还的本息之和
self.repayment_all_money = self.repayment_months_money_2 * self.Loan_term_month
self.repayment_all_money_2 = round(self.repayment_all_money,2)
# 计算等额本息法要还的利息
self.repayment_rate_money = self.repayment_all_money - self.Loan_money
self.repayment_rate_money_2 = round(self.repayment_rate_money,2)
# 等额本金法每月需要还款本金:贷款本金÷还款月数
self.money_month = self.Loan_money/self.Loan_term_month
注意:由于存在四舍五入以及python是先转换成2进制进行计算等原因,不同工具计算结果会有些许差异。
这里暂且不表,我们主要看思路。
比如我们贷款50w,年限20年,年利率4.5%。这个时候,我们计算出来的结果:
计算等额本息法每月还款金额: 3163.25
计算等额本息法总共要还的本息之和: 759180.0
计算等额本息法要还的利息: 259180.0
但是我们在招商银行里的计算结果:
可以发现,除月供都是3163.25之外,本息之和和利息总额有0.75的差距。
山月的本息之和的计算方式:月供金额*月份,即3163.25*240=759180。
2)函数show
这部分是计算按钮对应的函数。
即我们通过获取Entry控件输入的数据,经过处理计算,把结果写入到对应的Text控件。
# 计算按钮对应的函数
def show(self):
self.count()
# 把等额本息还款法的结果插入对应的Text组件
self.Text_months_money.delete(1.0, "end")
self.Text_months_money.insert('end',self.repayment_months_money_2)
self.Text_total_rates.delete(1.0, "end")
self.Text_total_rates.insert('end',self.repayment_rate_money_2)
self.Text_total_money.delete(1.0, "end")
self.Text_total_money.insert('end',self.repayment_all_money_2)
# 计算等额本金法还款本息之和和还款利息
self.all_money_Equalloan = 0
for i in range(self.Loan_term_month):
self.repayment_months_money = self.money_month + (self.Loan_money-(self.money_month*i))*self.Loan_rate_month
self.repayment_months_money_2 = round(self.repayment_months_money,2)
self.all_money_Equalloan += self.repayment_months_money_2
self.all_money_Equalloan_2 = round(self.all_money_Equalloan,2)
self.Loan_money_Equalloan = self.all_money_Equalloan_2 - self.Loan_money
self.Loan_money_Equalloan_2 = round(self.Loan_money_Equalloan,2)
# 把等额本金还款法的结果插入对应的Text组件
self.Text_total_rates_Equalloan.delete(1.0, "end")
self.Text_total_rates_Equalloan.insert('end',self.Loan_money_Equalloan_2)
self.Text_total_money_Equalloan.delete(1.0, "end")
self.Text_total_money_Equalloan.insert('end',self.all_money_Equalloan_2)
3)函数cle
这是重置按钮对应的函数,用来删除Entry控件和Text控件的内容。
# 重置按钮对应的函数
def cle(self):
self.Entry_money.delete(0,"end")
self.Entry_term.delete(0,"end")
self.Entry_rate.delete(0,"end")
self.Text_months_money.delete(1.0, "end")
self.Text_total_rates.delete(1.0, "end")
self.Text_total_money.delete(1.0, "end")
self.Text_total_rates_Equalloan.delete(1.0, "end")
self.Text_total_money_Equalloan.delete(1.0, "end")
4)函数repayment
这是点击查看按钮对应的函数。
因为等额本金每月的还款金额是在慢慢的减少的,所以这里另外创建了个顶级窗口来显示月供数据。
# 点击查看按钮对应的函数
def repayment(self):
self.count()
# 构建个顶级窗口
self.top_repayment = tkinter.Toplevel()
self.top_repayment.lift(windows)
self.top_repayment.title('每月还款')
self.top_repayment.geometry('300x500+200+80')
self.top_repayment.configure(bg='#576679')
# 设置带滚动条的Text组件
scr = tkinter.Scrollbar(self.top_repayment)
scr.pack(side=RIGHT, fill=Y)
Text_repayment_month = tkinter.Text(self.top_repayment, width=60, height=40, font=('黑体',12),fg='#E9D1A7', bg='#576679',yscrollcommand=scr.set)
Text_repayment_month.pack(expand=YES,fill=BOTH)
# 计算等额本金还款法每月还款金额,并插入到Text组件里
for i in range(self.Loan_term_month):
self.repayment_months_money = self.money_month + (self.Loan_money-(self.money_month*i))*self.Loan_rate_month
self.repayment_months_money_2 = round(self.repayment_months_money,2)
Text_repayment_month.insert("end", " 第 %s 月: %s元" % (i+1,self.repayment_months_money_2))
Text_repayment_month.insert(tkinter.INSERT, '\n') # 换行
结果(贷款50w,年限20年,年利率4.5%):
招商银行计算结果:
bingo~现在就是组装啦,你会了吗?
参考代码放在后台了,回复【贷款计算器】自取。
已经到底啦~(≧▽≦*)/~
往 期 推 荐




您的“点赞”、“在看”和 “分享”是我们产出的动力。