房贷计算器——新增选择还款方式
#!/usr/bin/env python
# coding: utf-8# In[4]:'''
文字‘房贷计算器’
文字‘贷款总金额’:输入框
文字‘贷款期限’:输入框
文字‘年利率’:输入框
按钮‘开始计算’
返回:
月供
总利息'''
from tkinter import *
import time
class Application():def __init__(self,app=None):self.app=appself.application()self.n1=0self.e0=self.e1=0def application(self):'''功能一:创建输入界面,包含:标题0、贷款金额1、期限2和利率3'''#0房贷计算器self.label0=Label(self.app,text='房贷计算器',font=('黑体',20)).grid(row=0,column=1)#1贷款总金额self.label1=Label(self.app,text='贷款总金额',font=('黑体', 16)).grid(row=1)#1输入框(贷款总金额)1self.v1=StringVar()self.entry1=Entry(self.app,textvariable=self.v1,font=('黑体', 16)).grid(row=1,column=1)self.label1=Label(self.app,text='贷款总金额',font=('黑体', 16)).grid(row=1)self.unit1=Label(self.app,text='元',font=('黑体', 16)).grid(row=1,column=2)#2标签Label2self.label2=Label(self.app,text='贷款期限',font=('黑体', 16)).grid(row=2)#2输入框(贷款期限)self.v2=StringVar()self.entry2=Entry(self.app,textvariable=self.v2,font=('黑体', 16)).grid(row=2,column=1)self.unit2=Label(self.app,text='年',font=('黑体', 16)).grid(row=2,column=2)#3标签Label3self.label3=Label(self.app,text='年利率',font=('黑体', 16)).grid(row=3)#3输入框(贷款期限)self.v3=StringVar()self.entry3=Entry(self.app,textvariable=self.v3,font=('黑体', 16)).grid(row=3,column=1)self.unit3=Label(self.app,text='%',font=('黑体', 16)).grid(row=3,column=2)#选择还款方式:0等额本息;1等额本金self.var=IntVar()self.ra0=Radiobutton(self.app,text='等额本息',variable=self.var,value=0,font=('黑体',16))self.ra0.grid(row=4,column=0)self.ra1=Radiobutton(self.app,text='等额本金',variable=self.var,value=1,font=('黑体',16))self.ra1.grid(row=4,column=1) import mathdef fangdai():'''房贷计算器输入:I:年利率 N:年限 a:贷款总额输出:总利息'''def not_num(x):try:float(x)return Falseexcept Exception as e:return True#1if self.v1.get()=='':self.erro1=Label(self.app,text='请输入贷款总金额',font=('黑体', 10),fg='red')self.erro1.config(background='white')self.erro1.grid(row=1,column=1)self.app.after(3000,self.erro1.destroy)elif not self.v1.get().isdigit():self.erro1=Label(self.app,text='请输入数字',font=('黑体', 10),fg='red')self.erro1.config(background='white')self.erro1.grid(row=1,column=1)self.app.after(3000,self.erro1.destroy)if self.v2.get()=='':self.erro2=Label(self.app,text='请输入贷款期限',font=('黑体', 10),fg='red')self.erro2.config(background='white')self.erro2.grid(row=2,column=1)self.app.after(3000,self.erro2.destroy)elif not self.v2.get().isdigit():self.erro2=Label(self.app,text='请输入数字',font=('黑体', 10),fg='red')self.erro2.config(background='white')self.erro2.grid(row=2,column=1)self.app.after(3000,self.erro2.destroy)if self.v3.get()=='':self.erro3=Label(self.app,text='请输入年利率',font=('黑体', 10),fg='red')self.erro3.config(background='white')self.erro3.grid(row=3,column=1)self.app.after(3000,self.erro3.destroy)elif not_num(self.v3.get()):print('lalala')self.erro3=Label(self.app,text='请输入数字',font=('黑体', 10),fg='red')self.erro3.config(background='white')self.erro3.grid(row=3,column=1)self.app.after(3000,self.erro3.destroy)a=int(self.v1.get())N=int(self.v2.get())*12I=float(self.v3.get())*0.01i=I/12#月利率if self.var.get()==0:'''等额本息'''b=(a*i*math.pow((1+i),N))/(math.pow(1+i,N)-1)#月供zl=0#总利息for j in range(1,N+1):#每月利息l=(a*i-b)*((1+i)**(j-1))+bzl+=lif self.e1==1:self.result2.destroy()self.result3.destroy()self.result4.destroy()print('lalaladddd')self.result0=Label(self.app,text='总利息='+str(round(zl,2)),font=('黑体', 20))self.result0.grid(row=7,column=1)self.result1=Label(self.app,text='月供='+str(round(b,2)),font=('黑体', 20))self.result1.grid(row=8,column=1)self.e0=1else:'''等额本金return:0总利息1首月还款2每月递减'''#0总利息zl=0for j in range(1,N+1):l=(a-(j-1)*(a/N))*izl+=l#1首月还款b=a/N+a*i#2每月递减d=a/N*I/12if self.e0==1:self.result0.destroy()self.result1.destroy()self.result2=Label(self.app,text='总利息='+str(round(zl,2)),font=('黑体', 20))self.result2.grid(row=7,column=1,columnspan=2)self.result3=Label(self.app,text='首月还款='+str(round(b,2)),font=('黑体', 20))self.result3.grid(row=8,column=1,columnspan=2)self.result4=Label(self.app,text='每月递减='+str(round(d,2)),font=('黑体', 20))self.result4.grid(row=9,column=1,columnspan=2)self.e1=1def get_canvas():self.img =PhotoImage(file = r'.\IMG_5768.png')if self.n1==0:self.n1+=1self.pic=Label(self.app,image=self.img).grid(columnspan=3) self.bt=Button(self.app,text='开始计算',command=fangdai,font=('黑体', 16)).grid(row=5,column=1)self.bt=Button(self.app,text='生成图表',command=get_canvas,font=('黑体', 16)).grid(row=6,column=1)#以下为添加图表if __name__=='__main__':app=Tk()app.title('房贷计算器')App=Application(app)app.geometry('600x600+300+150')#窗口大小设置app.mainloop()
两种还款方式:等额本息和等额本金
错误提示机制
1、请输入金额
if self.v1.get()=='':self.erro1=Label(self.app,text='请输入贷款总金额',font=('黑体', 10),fg='red')self.erro1.config(background='white')self.erro1.grid(row=1,column=1)self.app.after(3000,self.erro1.destroy)
2、请输入数字
elif not self.v2.get().isdigit():self.erro2=Label(self.app,text='请输入数字',font=('黑体', 10),fg='red')self.erro2.config(background='white')self.erro2.grid(row=2,column=1)self.app.after(3000,self.erro2.destroy)