Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

Construir um calendário é uma ótima maneira de aprender sobre a criação de aplicativos GUI com o módulo Tkinter do Python. Você pode usar este aplicativo para gerenciar e planejar eventos com antecedência.

Indo além, você pode estender o aplicativo para rastrear as próximas reuniões e definir lembretes. Você pode até introduzir a colaboração com os calendários de outros usuários para evitar conflitos de agendamento.

Tudo começa com o esqueleto básico de um aplicativo GUI Calendar.

Os módulos Calendar, Tkinter e DateTime

Para construir o Calendário da GUI, você usará o Calendário, o Tkinter e o Módulo DateTime. O módulo de calendário vem com o Python e permite que você execute ações relacionadas a datas, meses e calendários.

Tkinter permite que você crie aplicativos de desktop. Ele oferece uma variedade de widgets, bibliotecas úteis, objetos de tela e analisadores HTML/XML/PDF. Para construir um aplicativo GUI, tudo o que você precisa fazer é:

instagram viewer

  1. Importe a biblioteca.
  2. Crie uma janela.
  3. Adicione widgets a essa janela.
  4. Chame o loop de evento principal para executar ações com base na interação do usuário.

Para instalar o Tkinter em seu sistema, abra um terminal e execute:

pip instalar tkinter

O módulo DateTime é outro integrado. Ele oferece várias classes que podem lidar com datas, horas e intervalos de tempo. Com este módulo, você pode construir um agendador de eventos, um despertador, uma calculadora de data e um aplicativo de fuso horário.

Como construir um calendário GUI usando Python

Você pode encontrar o código-fonte do GUI Calendar usando Python neste Repositório GitHub.

Comece importando o módulo Tkinter, Calendar e DateTime. Defina uma função, printCalendar. Use o pegar() método no Spinbox (definido posteriormente no código) para extrair o mês e o ano que o usuário escolheu. Passe esses valores para o módulo de calendário para obter um calendário de texto formatado representando o ano e o mês especificados. Este texto representa uma grade monoespaçada simples, com dias organizados em semanas começando na segunda-feira.

Limpe todos os dados existentes da tela. 1.0 indica o início do campo, e fim indica o fim do campo. Por fim, insira o calendário gerado anteriormente e exiba-o na tela.

de tkinter importar *
importar calendário
de data hora importar data

defprintCalendar():
mês = int (month_box.get())
ano = int (caixa_ano.get())
output_calendar = calendar.month (ano, mês)
calendar_field.delete(1.0, 'fim')
calendar_field.insert('fim', calendário_saída)

Defina uma função, reiniciar. Exclua o conteúdo da tela e defina o mês e o ano para o presente e use o config() método para exibi-lo na tela.

defreiniciar():
calendar_field.delete(1.0, 'fim')
var_mês.set (mês_atual)
var_ano.set (ano_atual)
month_box.config (textvariable=month_var)
year_box.config (textvariable=year_var)

Defina uma função, feche para destruir a exibição da janela e saia do programa.

deffechar():
guiWindow.destroy()

Inicialize a instância do Tkinter e exiba a janela raiz. Defina o título, as dimensões em pixels e desative seu redimensionamento mantendo os parâmetros como 0.

se __nome__ == "__principal__":
guiWindow = Tk()
guiWindow.title("Calendário GUI")
guiWindow.geometry('500x550')
guiWindow.resizable(0, 0)

Defina quatro quadros para o título do cabeçalho, a entrada do mês e do ano, a exibição e os botões. Ele executa a função de um container, direcionando a colocação de outros widgets. Ele organiza o layout e fornece preenchimento para esses widgets usando seções retangulares na tela.

Organize os quadros em blocos antes de colocá-los na guijanela usando o pacote() método. Defina o valor de expandir como true para permitir que o widget seja redimensionado e expandido em seu espaço disponível. Colocou o preencher atributo para ambos para permitir que o widget se expanda para ocupar toda a janela na direção x e y.

 header_frame = Quadro (guiWindow)
entry_frame = Quadro (guiWindow)
result_frame = Quadro (guiWindow)
button_frame = Quadro (guiWindow)

header_frame.pack (expandir=Verdadeiro, preencha="ambos")
entry_frame.pack (expandir=Verdadeiro, preencha="ambos")
result_frame.pack (expandir=Verdadeiro, preencha="ambos")
button_frame.pack (expandir=Verdadeiro, preencha="ambos")

Especifique três rótulos para o cabeçalho, mês e ano. Defina a janela principal na qual deseja colocá-la, o texto que ela exibirá, os estilos de fonte junto com a cor da fonte. Embale e coloque as etiquetas em uma posição apropriada. Associado IntVar() com o entrada_quadro para definir e receber dados inteiros.

 header_label = Rótulo (header_frame, text="CALENDÁRIO",
fonte=('arial', '45', 'audacioso'), fg ="#A020F0")

header_label.pack (expandir=Verdadeiro, preencha="ambos")

months_label = Rótulo (entry_frame, text="Mês:",
fonte=("arial", "20", "audacioso"), fg ="#000000")

year_label = Rótulo (entry_frame, text="Ano:",
fonte=("arial", "20", "audacioso"), fg ="#000000")

mês_rótulo.lugar (x=30, y=0)
ano_rótulo.lugar (x=275, y=0)
var_mês = IntVar (quadro_entrada)
ano_var = IntVar (entry_frame)

Obtenha o mês atual, ano e defina-o para a variável IntVar(). Use o widget Spinbox para especificar um intervalo de valores para o usuário. Defina o intervalo de valores que o Spinbox conterá, a largura, o valor atual que deve conter e os estilos de fonte. Posicione as caixas adequadamente.

 current_month = data.hoje().mês
current_year = data.hoje().ano
var_mês.set (mês_atual)
var_ano.set (ano_atual)

months_box = Spinbox (entry_frame, from_=1, para =12, largura="10",
textvariable=mês_var, fonte=('arial','15'))

year_box = Spinbox (entry_frame, from_=0000, para =3000, largura="10",
textvariable=ano_var, fonte=('arial','15'))

mês_caixa.lugar (x=130, y=5)
ano_caixa.lugar (x=360, y=5)

Declare um campo de texto e defina sua janela pai, largura, altura, estilo de fonte, estilo de animação 3D e largura da borda. Organize o widget de texto e declare três botões para exibir, redefinir e fechar a janela. Os botões contêm uma propriedade adicional de cor de fundo e uma propriedade de comando.

Usando a propriedade command, você pode definir a função que deve ser executada quando clicada. Coloque os botões em uma única linha com amplo espaço entre cada um deles.

 calendar_field = Texto (resultado_quadro, largura=20, altura=8,
fonte=("correio", "18"), relevo=CUME, largura da borda=2)

calendar_field.pack()

display_button = Botão (button_frame, text="MOSTRAR", bg ="#A020F0",
fg="#E0FFFF", comando=imprimirCalendário, fonte=('arial', '15'))

reset_button = Botão (button_frame, text="REINICIAR", bg ="#A020F0",
fg="#E0FFFF", comando=redefinir, fonte=('arial','15'))

close_button = Botão (button_frame, text="FECHAR", bg ="#A020F0",
fg="#E0FFFF", comando=fechar, fonte=('arial','15'))

display_button.place (x=55, y=0)
reset_button.place (x=210, y=0)
close_button.place (x=350, y=0)

O circuito principal() A função diz ao Python para executar o loop de eventos Tkinter e ouvir eventos (como pressionamentos de botão) até que você feche a janela.

 guiWindow.mainloop()

Junte todo o código para ver o calendário da GUI em ação.

Saída de amostra do calendário da GUI

Ao executar o programa acima, o programa exibe uma janela com o mês e a data atuais. O botão Redefinir exibe a mesma tela quando clicado.

Ao definir o mês como 3 e o ano como 2000, o programa exibe o calendário de março de 2000. Ao pressionar o botão Fechar, o programa destrói a janela e interrompe sua execução.

Assuma alguns projetos de GUI para iniciantes usando Python

Construir aplicativos GUI nunca foi tão fácil. O módulo Tkinter do Python fornece muitos widgets úteis que você pode personalizar totalmente com muito pouco código. Junto com isso, você obtém acesso a gerenciadores de layout, como pack, grid e place para posicionar os elementos de acordo com o seu desejo.

Você pode criar um jogo de teste de digitação, paleta de cores, conversor de moeda ou calculadora para começar. Esses aplicativos são divertidos de construir e desenvolverão suas habilidades de programação orientada a objetos com facilidade.