Mundo em Python

Calculadora Financeira (usando tkinter)

from tkinter import *
from tkinter import ttk
class CalculadoraFinanceira:
def __init__(self, root):
self.root = root
self.root.title("Calculadora Financeira")
self.root.configure(background='#1e3743')
self.root.geometry("600x400")
self.root.resizable(0, 0)
self.criar_widgets() def criar_widgets(self):
self.criar_frames()
self.criar_abas()
self.criar_widgets_juros_simples()
self.criar_widgets_juros_compostos()
self.criar_widgets_amortizacao_emprestimo()
self.criar_widgets_valor_futuro()
self.criar_menus() def criar_frames(self):
self.frame_principal = Frame(self.root, bd=4, bg='#dfe3ee',
highlightbackground='#759fe6', highlightthickness=2)
self.frame_principal.place(relx=0.02, rely=0.02, relwidth=0.96, relheight=0.96) def criar_abas(self):
self.abas = ttk.Notebook(self.frame_principal)
self.aba_juros_simples = Frame(self.abas, bg="#dfe3ee")
self.aba_juros_compostos = Frame(self.abas, bg="#dfe3ee")
self.aba_amortizacao_emprestimo = Frame(self.abas, bg="#dfe3ee")
self.aba_valor_futuro = Frame(self.abas, bg="#dfe3ee") self.abas.add(self.aba_juros_simples, text="Juros Simples")
self.abas.add(self.aba_juros_compostos, text="Juros Compostos")
self.abas.add(self.aba_amortizacao_emprestimo, text="Amortização Empréstimo")
self.abas.add(self.aba_valor_futuro, text="Valor Futuro")
self.abas.place(relx=0, rely=0, relwidth=1, relheight=1) def criar_widgets_juros_simples(self):
self.capital_simples = DoubleVar()
self.taxa_simples = DoubleVar()
self.tempo_simples = DoubleVar() self.criar_label_entrada(self.aba_juros_simples, "Capital", self.capital_simples, 0.05, 0.1)
self.criar_label_entrada(self.aba_juros_simples, "Taxa de Juro (%)", self.taxa_simples, 0.05, 0.25)
self.criar_label_entrada(self.aba_juros_simples, "Anos", self.tempo_simples, 0.05, 0.4) Button(self.aba_juros_simples, text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=self.calcular_juros_simples).place(relx=0.05, rely=0.55,
relwidth=0.9, relheight=0.15) self.resultado_juros_simples = StringVar()
self.resultado_montante_simples = StringVar()
self.criar_labels_resultado(self.aba_juros_simples, self.resultado_juros_simples,
self.resultado_montante_simples, 0.75, "Juros Simples", "Montante Final") def criar_widgets_juros_compostos(self):
self.capital_composto = DoubleVar()
self.taxa_composto = DoubleVar()
self.tempo_composto = DoubleVar() self.criar_label_entrada(self.aba_juros_compostos, "Capital", self.capital_composto, 0.05, 0.1)
self.criar_label_entrada(self.aba_juros_compostos, "Taxa de Juro (%)", self.taxa_composto, 0.05, 0.25)
self.criar_label_entrada(self.aba_juros_compostos, "Anos", self.tempo_composto, 0.05, 0.4) Button(self.aba_juros_compostos, text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=self.calcular_juros_compostos).place(relx=0.05, rely=0.55,
relwidth=0.9, relheight=0.15) self.resultado_juros_compostos = StringVar()
self.resultado_montante_composto = StringVar()
self.criar_labels_resultado(self.aba_juros_compostos, self.resultado_juros_compostos,
self.resultado_montante_composto, 0.75, "Juros Compostos", "Montante") def criar_widgets_amortizacao_emprestimo(self):
self.valor_emprestimo = DoubleVar()
self.taxa_amortizacao = DoubleVar()
self.num_parcelas = IntVar() self.criar_label_entrada(self.aba_amortizacao_emprestimo, "Valor do Empréstimo", self.valor_emprestimo, 0.05, 0.1)
self.criar_label_entrada(self.aba_amortizacao_emprestimo, "Taxa de Juro (%)", self.taxa_amortizacao, 0.05, 0.25)
self.criar_label_entrada(self.aba_amortizacao_emprestimo, "Nº de Parcelas", self.num_parcelas, 0.05, 0.4) Button(self.aba_amortizacao_emprestimo, text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=self.calcular_amortizacao).place(relx=0.05, rely=0.55,
relwidth=0.9, relheight=0.15) self.resultado_amortizacao_label = Label(self.aba_amortizacao_emprestimo, text="Prestação mensal",
font=("Arial", "15", "bold"), bg='#dfe3ee', fg='#107db2')
self.resultado_amortizacao_label.place(relx=0.05, rely=0.75) self.resultado_amortizacao = Label(self.aba_amortizacao_emprestimo,
font=("Arial", "14", "bold"), bg='#dfe3ee', fg='#107db2')
self.resultado_amortizacao.place(relx=0.55, rely=0.75, relwidth=0.4) def criar_widgets_valor_futuro(self):
self.valor_inicial = DoubleVar()
self.contribuicao_mensal = DoubleVar()
self.taxa_mensal = DoubleVar()
self.tempo = IntVar() self.criar_label_entrada(self.aba_valor_futuro, "Valor Inicial", self.valor_inicial, 0.05, 0.1)
self.criar_label_entrada(self.aba_valor_futuro, "Tx de Juro mensal (%)", self.taxa_mensal, 0.05, 0.25)
self.criar_label_entrada(self.aba_valor_futuro, "Anos", self.tempo, 0.05, 0.4)
self.criar_label_entrada(self.aba_valor_futuro, "Contribuição Mensal", self.contribuicao_mensal, 0.05, 0.55) Button(self.aba_valor_futuro, text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=self.calcular_valor_futuro).place(relx=0.05, rely=0.7,
relwidth=0.9, relheight=0.15) self.resultado_valor_futuro_label = Label(self.aba_valor_futuro, text="Valor Futuro",
font=("Arial", "15", "bold"), bg='#dfe3ee', fg='#107db2')
self.resultado_valor_futuro_label.place(relx=0.05, rely=0.85) self.resultado_valor_futuro = Label(self.aba_valor_futuro,
font=("Arial", "14", "bold"), bg='#dfe3ee', fg='#107db2')
self.resultado_valor_futuro.place(relx=0.55, rely=0.85, relwidth=0.4) def criar_label_entrada(self, parent, texto_label, variavel, relx_label, rely_label, font=("Arial", "15", "bold")):
Label(parent, text=texto_label, bg='#dfe3ee', fg='#107db2', font=font).place(relx=relx_label,
rely=rely_label)
Entry(parent, textvariable=variavel, justify='center', font=font).place(relx=relx_label + 0.4,
rely=rely_label, relwidth=0.45) def criar_labels_resultado(self, parent, variavel_resultado, variavel_montante, rely, texto_resultado,
texto_montante):
Label(parent, text=texto_resultado, font=("Arial", "13", "bold"), bg='#dfe3ee', fg='#107db2').place(relx=0.05,
rely=rely)
Label(parent, text=texto_montante, font=("Arial", "13", "bold"), bg='#dfe3ee', fg='#107db2').place(relx=0.05,
rely=rely + 0.1)
Label(parent, textvariable=variavel_resultado, font=("Arial", "14", "bold"), bg='#dfe3ee', fg='#107db2').place(relx=0.55, rely=rely, relwidth=0.3)
Label(parent, textvariable=variavel_montante, font=("Arial", "14", "bold"), bg='#dfe3ee', fg='#107db2').place(relx=0.55, rely=rely + 0.1, relwidth=0.3) def calcular_juros_simples(self):
capital = self.capital_simples.get()
taxa = self.taxa_simples.get()
tempo = self.tempo_simples.get()
juros = capital * (taxa / 100) * tempo
montante = juros + capital
self.resultado_juros_simples.set(round(juros, 2))
self.resultado_montante_simples.set(round(montante, 2)) def calcular_juros_compostos(self):
capital = self.capital_composto.get()
taxa = self.taxa_composto.get()
tempo = self.tempo_composto.get()
montante = capital * (1 + taxa / 100) ** tempo
juros = montante - capital
self.resultado_juros_compostos.set(round(juros, 2))
self.resultado_montante_composto.set(round(montante, 2)) def calcular_amortizacao(self):
valor_emprestimo = self.valor_emprestimo.get()
taxa = self.taxa_amortizacao.get() / 100 / 12
parcelas = self.num_parcelas.get() if taxa == 0: # Evitar divisão por zero
prestacao = valor_emprestimo / parcelas
else:
prestacao = valor_emprestimo * (taxa * (1 + taxa) ** parcelas) / ((1 + taxa) ** parcelas - 1) self.resultado_amortizacao.config(text=round(prestacao, 2)) # Atualizar o texto do Label

def calcular_valor_futuro(self):
valor_inicial = self.valor_inicial.get()
contribuicao_mensal = self.contribuicao_mensal.get()
taxa_mensal = self.taxa_mensal.get() / 100 / 12
tempo_meses = self.tempo.get() * 12

valor_futuro = valor_inicial * (1 + taxa_mensal) ** tempo_meses
valor_futuro += contribuicao_mensal * (((1 + taxa_mensal) ** tempo_meses - 1) / taxa_mensal) self.resultado_valor_futuro.config(text=round(valor_futuro, 2)) # Atualizar o texto do Label

def criar_menus(self):
menu_bar = Menu(self.root)
self.root.config(menu=menu_bar)
menu_opcoes = Menu(menu_bar)
menu_bar.add_cascade(label="Opções", menu=menu_opcoes)
menu_opcoes.add_command(label="Sair", command=self.root.quit)
if __name__ == "__main__":
root = Tk()
app = CalculadoraFinanceira(root)
root.mainloop()
0