Mundo em Python

Calendário

import calendar
from tkinter import *
from tkinter import ttk root = Tk()
root.geometry("600x600")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Calendário") # Título
titulo = Label(text="Calendário", font=("Arial", 28, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.35, rely=0.05) # Rótulo Ano
texto_sub1 = Label(text="Ano:", font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.2, rely=0.18) # Rótulo Mês
texto_sub2 = Label(text="Mês:", font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub2.place(relx=0.2, rely=0.33) # Entrada Ano
Ano = StringVar()
Ano_entrada = Entry(textvariable=Ano,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Ano_entrada.place(relx=0.55, rely=0.19, relwidth=0.26)
Ano_entrada.focus() # Combobox de Meses
Mes = StringVar()
meses_nomes = [
"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
]
combo_meses = ttk.Combobox(root, textvariable=Mes, values=meses_nomes,
font=("Arial", 12), state="readonly", justify='center')
combo_meses.place(relx=0.55, rely=0.34, relwidth=0.26)
combo_meses.current(0) # Função para limpar
def limpar():
Ano_entrada.delete(0, END)
combo_meses.current(0)
resultado_texto.config(text="") # Função principal
def app():
try:
ano = int(Ano.get())
if ano <= 0:
raise ValueError("Ano deve ser positivo.") mes_nome = Mes.get()
mes = meses_nomes.index(mes_nome) + 1

# Obter estrutura do mês
cal = calendar.Calendar(firstweekday=0) # Domingo = 0
dias_mes = cal.monthdayscalendar(ano, mes) # Cabeçalho com nome do mês e ano
mensagem = f"{mes_nome} {ano}\n"

# Cabeçalho dos dias da semana em português
mensagem += "Dom Seg Ter Qua Qui Sex Sáb\n"

# Preencher dias com alinhamento
for semana in dias_mes:
for dia in semana:
if dia == 0:
mensagem += " " # espaço para dias vazios
else:
mensagem += f"{dia: >2} " # alinhado à direita com 2 dígitos
mensagem += "\n"

except ValueError:
mensagem = "Entrada inválida. Por favor, introduza um ano válido."

resultado_texto.config(text=mensagem) # Botões
but1 = Button(text="Mostrar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.45, 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.45, 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.45, relwidth=0.25, relheight=0.1) # Resultado
resultado_texto = Label(text="", font=("Courier", 12, "bold"), bg="#cfe2f3",
anchor='nw', justify='left')
resultado_texto.place(relx=0.05, rely=0.6, relwidth=0.9, relheight=0.35) root.mainloop()
0