import flet as ft
def main(page: ft.Page):
def minus_click_summcredit(e):
if sum_input.value=="":
sum_input.value = 0
sum_input.value = str(int(sum_input.value) - 100000)
page.update()
else:
sum_input.value = str(int(sum_input.value) - 100000)
page.update()
def plus_click_summcredit(e):
if sum_input.value=="":
sum_input.value = 0
sum_input.value = str(int(sum_input.value) + 100000)
page.update()
else:
sum_input.value = str(int(sum_input.value) + 100000)
page.update()
def minus_click_procent(e):
if rate_input.value=="":
rate_input.value = 0
rate_input.value = str(int(rate_input.value) - 1)
page.update()
else:
rate_input.value = str(int(rate_input.value) - 1)
page.update()
def plus_click_procent(e):
if rate_input.value=="":
rate_input.value = 0
rate_input.value = str(int(rate_input.value) + 1)
page.update()
else:
rate_input.value = str(int(rate_input.value) + 1)
page.update()
def minus_click_srok(e):
if term_input.value=="":
term_input.value = 0
term_input.value = str(int(term_input.value) - 1)
page.update()
else:
term_input.value = str(int(term_input.value) - 1)
page.update()
def plus_click_srok(e):
if term_input.value=="":
term_input.value = 0
term_input.value = str(int(term_input.value) + 1)
page.update()
else:
term_input.value = str(int(term_input.value) + 1)
page.update()
#Создание кнопок
button_summcredit_ADD = ft.IconButton(ft.icons.ADD, on_click=plus_click_summcredit)
button_summcredit_REMOVE = ft.IconButton(ft.icons.REMOVE, on_click=minus_click_summcredit)
button_procent_ADD = ft.IconButton(ft.icons.ADD, on_click=plus_click_procent)
button_procent_REMOVE = ft.IconButton(ft.icons.REMOVE, on_click=minus_click_procent)
button_srok_ADD = ft.IconButton(ft.icons.ADD, on_click=plus_click_srok)
button_srok_REMOVE = ft.IconButton(ft.icons.REMOVE, on_click=minus_click_srok)
page.bgcolor = "#3A3838"
page.window_width = 450
page.window_height = 500
page.title = "Ипотечный калькулятор"
page.vertical_alignment = ft.MainAxisAlignment.CENTER
# Переменные для сохранения введенных пользователем данных
sum_input = ft.TextField(label="Сумма кредита:", label_style=ft.TextStyle(color="#929090"), width=300,color="#FFFFFF")
rate_input = ft.TextField(label="Процентная ставка (% годовых):", label_style=ft.TextStyle(color="#929090"),width=300,color="#FFFFFF")
term_input = ft.TextField(label="Срок кредита (лет):",label_style=ft.TextStyle(color="#929090"), width=300,color="#FFFFFF")
result_text = ft.Text(value="", size=20, color="#FFFFFF")
def calculate_mortgage(e):
try:
# Читаем ввод пользователя
credit_sum = float(sum_input.value)
annual_interest_rate = float(rate_input.value)/100
loan_term_years = int(term_input.value)
# Переводим проценты в месячные
monthly_interest_rate = annual_interest_rate / 12
# Срок кредита в месяцах
total_months = loan_term_years * 12
# Формула аннуитетного платежа
numerator = credit_sum * monthly_interest_rate * ((1 + monthly_interest_rate)**total_months)
denominator = ((1 + monthly_interest_rate)**total_months) - 1
monthly_payment = numerator / denominator
# Общая сумма выплат
total_payment = monthly_payment * total_months
# Общая переплата
overpayment = total_payment - credit_sum
# Формируем вывод результата
result_text.value = (
f"Ежемесячный платёж: {monthly_payment:.2f}\n"
f"Общая выплата: {total_payment:.2f}\n"
f"Переплата: {overpayment:.2f}"
)
except ValueError:
result_text.value = "Ошибка! Проверьте правильность ввода."
finally:
page.update()
# Создание кнопки "Рассчитать"
button = ft.ElevatedButton("Рассчитать", on_click=calculate_mortgage, bgcolor='#FFFFFF',color = "#000000")
# Размещение элементов в столбце
page.add(ft.Column([ft.Row([button_summcredit_REMOVE,sum_input,button_summcredit_ADD]),ft.Row([button_procent_REMOVE,rate_input,button_procent_ADD]), ft.Row([button_srok_REMOVE,term_input,button_srok_ADD]), button, result_text]))
ft.app(target=main)