房贷计算器——新增选择还款方式

房贷计算器——新增选择还款方式

#!/usr/bin/env python
# coding: utf-8

# In[4]:


'''
文字‘房贷计算器’
文字‘贷款总金额’:输入框
文字‘贷款期限’:输入框
文字‘年利率’:输入框
按钮‘开始计算’
返回:
月供
总利息

'''
from tkinter import *
import time
class Application():
    def __init__(self,app=None):
        self.app=app
        self.application()
        self.n1=0
        self.e0=self.e1=0
    def 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输入框(贷款总金额)1
        self.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标签Label2
        self.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标签Label3
        self.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 math
        def fangdai():
            '''
            房贷计算器
            输入:I:年利率 N:年限 a:贷款总额
            输出:总利息
            '''
            def not_num(x):
                try:
                    float(x)
                    return False
                except Exception as e:
                    return True
            #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)
            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())*12
            I=float(self.v3.get())*0.01
            i=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))+b
                    zl+=l
                if 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=1
            else:
                
                '''
                等额本金
                return:
                0总利息
                1首月还款
                2每月递减
                '''
                #0总利息
                zl=0
                for j in range(1,N+1):
                    l=(a-(j-1)*(a/N))*i
                    zl+=l
                #1首月还款
                b=a/N+a*i
                #2每月递减
                d=a/N*I/12
                if 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=1
        def get_canvas():
            self.img =PhotoImage(file = r'.\IMG_5768.png')
            if self.n1==0:
                self.n1+=1
                self.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)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little_Yuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值