from tkinter import *
import re # Importa o módulo de expressões regulares
root = Tk()
root.geometry("500x250")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Horas por Extenso")
titulo = Label(text="Horas por Extenso",
font=("Arial", "25", "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.08, rely=0.05)
# Função para validar o formato hh:mm
def validar_hora(hora_texto):
padrao = r"^\d{2}:\d{2}$" # Expressão regular para validar hh:mm
return re.match(padrao, hora_texto) is not None
def app():
hora_extenso = Var_hora.get() # Obtém a hora do campo de entrada
if not validar_hora(hora_extenso):
resultado_texto.config(text="Formato inválido! Use o formato hh:mm.")
return
try:
hora, minuto = map(int, hora_extenso.split(':'))
# Dicionário de números por extenso
numeros = {
0: 'zero', 1: 'um', 2: 'dois', 3: 'três', 4: 'quatro', 5: 'cinco',
6: 'seis', 7: 'sete', 8: 'oito', 9: 'nove', 10: 'dez', 11: 'onze',
12: 'doze', 13: 'treze', 14: 'quatorze', 15: 'quinze', 16: 'dezesseis',
17: 'dezessete', 18: 'dezoito', 19: 'dezenove', 20: 'vinte',
21: 'vinte e um', 22: 'vinte e dois', 23: 'vinte e três', 24: 'vinte e quatro',
25: 'vinte e cinco', 26: 'vinte e seis', 27: 'vinte e sete', 28: 'vinte e oito',
29: 'vinte e nove', 30: 'trinta', 31: 'trinta e um', 32: 'trinta e dois'
}
if minuto == 0:
mensagem = f"{numeros[hora]} horas"
elif minuto == 15:
mensagem = f"{numeros[hora]} horas e quinze minutos"
elif minuto == 30:
mensagem = f"{numeros[hora]} horas e meia"
elif minuto == 45:
if hora == 23:
mensagem = f"meia noite e quinze minutos"
else:
mensagem = f"{numeros[hora + 1]} horas menos quinze minutos"
elif minuto < 30:
mensagem = f"{numeros[hora]} horas e {numeros[minuto]} minutos"
else:
mensagem = f"{numeros[hora + 1]} horas menos {numeros[60 - minuto]} minutos"
resultado_texto.config(text=mensagem)
except ValueError:
resultado_texto.config(text="Hora inválida! Use o formato hh:mm.")
def limpar():
Var_hora.set("")
resultado_texto.config(text="")
# Definindo os elementos da interface
texto_sub1 = Label(text="Hora (hh:mm)",
font=("Arial", "18", "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.05, rely=0.25)
Var_hora = StringVar()
Var_hora_entrada = Entry(textvariable=Var_hora,
font=("Arial", "12", "bold"),
bg="white", fg="blue", justify='center')
Var_hora_entrada.place(relx=0.55, rely=0.33, relwidth=0.35)
but1 = Button(text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.55, relwidth=0.25, relheight=0.15)
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.55, relwidth=0.25, relheight=0.15)
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.55, relwidth=0.25, relheight=0.15)
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)
root.mainloop()