import tkinter as tk
from datetime import date, timedelta
from dateutil.easter import easter
def calcular_corpus_christi(ano):
"""Calcula a data de Corpus Christi para um dado ano."""
pascoa = easter(ano)
return pascoa + timedelta(days=60)
def calcular_feriados(ano, pais):
if pais == "Portugal":
feriados_fixos = {
"Ano Novo": date(ano, 1, 1),
"25 de Abril": date(ano, 4, 25),
"Dia do Trabalhador": date(ano, 5, 1),
"10 de Junho": date(ano, 6, 10),
"Assunção de Nossa Senhora": date(ano, 8, 15),
"5 de Outubro": date(ano, 10, 5),
"Dia de Todos os Santos": date(ano, 11, 1),
"Restauração da Independência": date(ano, 12, 1),
"Imaculada Conceição": date(ano, 12, 8),
"Natal": date(ano, 12, 25)
}
feriados_moveis = {
"Sexta-feira Santa": easter(ano) - timedelta(days=2),
"Domingo de Páscoa": easter(ano),
"Corpo de Deus": calcular_corpus_christi(ano)
}
elif pais == "Brasil":
feriados_fixos = {
"Ano Novo": date(ano, 1, 1),
"Tiradentes": date(ano, 4, 21),
"Dia do Trabalhador": date(ano, 5, 1),
"Independência do Brasil": date(ano, 9, 7),
"Nossa Senhora Aparecida": date(ano, 10, 12),
"Finados": date(ano, 11, 2),
"Proclamação da República": date(ano, 11, 15),
"Natal": date(ano, 12, 25)
}
feriados_moveis = {
"Carnaval": easter(ano) - timedelta(days=47),
"Sexta-feira Santa": easter(ano) - timedelta(days=2),
"Domingo de Páscoa": easter(ano),
"Corpus Christi": calcular_corpus_christi(ano)
}
return feriados_fixos, feriados_moveis
def mostrar_feriados(event=None):
try:
ano = int(ano_entry.get())
pais = pais_var.get()
feriados_fixos, feriados_moveis = calcular_feriados(ano, pais)
resultado_texto.delete('1.0', tk.END) # Limpar o campo de texto
resultado_texto.insert(tk.END, f"Feriados em {pais} no ano {ano}:\n")
for nome, data in feriados_fixos.items():
resultado_texto.insert(tk.END, f"{nome}: {data.strftime('%d/%m/%Y')}\n")
for nome, data in feriados_moveis.items():
resultado_texto.insert(tk.END, f"{nome}: {data.strftime('%d/%m/%Y')}\n")
except ValueError:
resultado_texto.delete('1.0', tk.END) # Limpar o campo de texto
resultado_texto.insert(tk.END, "Por favor, insira um ano válido.")
# Configuração da interface gráfica
root = tk.Tk()
root.title("Feriados Portugal e Brasil")
tk.Label(root, text="Selecione o país:").pack()
pais_var = tk.StringVar(value="Portugal")
tk.Radiobutton(root, text="Portugal", variable=pais_var, value="Portugal").pack(anchor=tk.W)
tk.Radiobutton(root, text="Brasil", variable=pais_var, value="Brasil").pack(anchor=tk.W)
tk.Label(root, text="Digite o ano:").pack()
ano_entry = tk.Entry(root)
ano_entry.pack()
# Vincular a tecla Enter ao botão "Mostrar Feriados"
ano_entry.bind('<Return>', mostrar_feriados)
tk.Button(root, text="Mostrar Feriados", command=mostrar_feriados).pack()
resultado_texto = tk.Text(root, height=15, width=50)
resultado_texto.pack()
root.mainloop()