from datetime import date
from tkinter import *
def calcular_idade(data_nascimento):
hoje = date.today()
anos = hoje.year - data_nascimento.year
meses = hoje.month - data_nascimento.month
dias = hoje.day - data_nascimento.day
if dias < 0:
meses -= 1
ultimo_mes = (hoje.month - 1) if hoje.month > 1 else 12
ultimo_ano = hoje.year if hoje.month > 1 else hoje.year - 1
dias += (date(ultimo_ano, ultimo_mes + 1, 1) - date(ultimo_ano, ultimo_mes, 1)).days
if meses < 0:
anos -= 1
meses += 12
return anos, meses, dias
# --- INTERFACE GRÁFICA ---
root = Tk()
root.geometry("800x400")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Calcular Idade Exata")
titulo = Label(text="Calcular Idade Exata",
font=("Arial", 28, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.3, rely=0.05)
texto_sub1 = Label(text="Data de Nascimento (dd/mm/aaaa):",
font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.05, rely=0.32)
Data_Nascimento = StringVar()
Data_Nascimento_entrada = Entry(textvariable=Data_Nascimento,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Data_Nascimento_entrada.place(relx=0.57, rely=0.33, relwidth=0.35)
Data_Nascimento_entrada.focus()
resultado_texto = Label(text="",
font=("Arial", 12, "bold"), bg="#cfe2f3")
resultado_texto.place(relx=0.05, rely=0.8, relwidth=0.9, relheight=0.15)
def limpar():
Data_Nascimento_entrada.delete(0, END)
resultado_texto.config(text="")
def app():
try:
# Obter texto da entrada
data_str = Data_Nascimento.get().strip()
# Converter para data
dia, mes, ano = map(int, data_str.split("/"))
data_nasc = date(ano, mes, dia)
# Calcular idade
anos, meses, dias = calcular_idade(data_nasc)
resultado_texto.config(
text=f"Sua idade é: {anos} anos, {meses} meses e {dias} dias.",
bg="#cfe2f3", fg="black"
)
except Exception:
resultado_texto.config(text="Formato inválido! Use dd/mm/aaaa.", fg="red", bg="#cfe2f3")
but1 = Button(text="Mostrar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.5, relwidth=0.25, relheight=0.1)
but_limpar = Button(text="Limpar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=limpar)
but_limpar.place(relx=0.4, rely=0.5, relwidth=0.25, relheight=0.1)
but_sair = Button(text="Sair", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=root.destroy)
but_sair.place(relx=0.7, rely=0.5, relwidth=0.25, relheight=0.1)
root.mainloop()