La création d’un calendrier est un excellent moyen d’apprendre à créer des applications graphiques avec le module Tkinter de Python. Vous pouvez utiliser cette application pour gérer et planifier des événements à l’avance.
En allant plus loin, vous pouvez étendre l’application pour suivre les réunions à venir et définir des rappels. Vous pourriez même introduire la collaboration avec les calendriers d’autres utilisateurs pour éviter les conflits de calendrier.
Tout commence par le squelette de base d’une application de calendrier à interface graphique.
Les modules Calendrier, Tkinter, et DateTime
Pour construire l’interface graphique du calendrier, vous utiliserez les modules Calendar, Tkinter et DateTime. Le module Calendar est fourni avec Python et vous permet d’exécuter des actions liées à la date, au mois et au calendrier.
Tkinter vous permet de créer des applications de bureau. Il offre une variété de widgets, de bibliothèques utiles, d’objets canvas et d’analyseurs HTML/XML/PDF. Pour construire une application GUI, tout ce que vous devez faire est :
- Importer la bibliothèque.
- Créer une fenêtre.
- Ajoutez des widgets à cette fenêtre.
- Appelez la boucle d’événements principale pour effectuer des actions basées sur l’interaction de l’utilisateur.
Pour installer Tkinter dans votre système, ouvrez un terminal et exécutez :
pip install tkinter
Le module DateTime est un autre module intégré. Il offre plusieurs classes qui peuvent traiter les dates, les heures et les intervalles de temps. Avec ce module, vous pouvez créer un programmateur d’événements, un réveil, une calculatrice de date et une application de fuseau horaire.
Comment construire un calendrier GUI en utilisant Python
Vous pouvez trouver le code source de l’interface graphique du calendrier en utilisant Python dans ce dépôt GitHub.
Commencez par importer Tkinter, Calendar, et le module DateTime. Définissez une fonction, printCalendar. Utiliser le get() sur la Spinbox (définie plus loin dans le code) pour extraire le mois et l’année que l’utilisateur a choisis. Passez ces valeurs au module calendrier pour obtenir un calendrier textuel formaté représentant l’année et le mois spécifiés. Ce texte représente une simple grille monospace, avec des jours disposés en semaines commençant le lundi.
Efface toutes les données existantes de l’écran. 1.0 indique le début du champ, et fin indique la fin du champ. Enfin, insérez le calendrier généré précédemment et affichez-le à l’écran.
from tkinter import *
import calendar
from datetime import date
def printCalendar():
month = int(month_box.get())
year = int(year_box.get())
output_calendar = calendar.month(year, month)
calendar_field.delete(1.0, 'end')
calendar_field.insert('end', output_calendar)
Définir une fonction, réinitialiser. Effacez le contenu de l’écran et réglez le mois et l’année sur le présent et utilisez la touche config() pour l’afficher à l’écran.
def reset():
calendar_field.delete(1.0, 'end')
month_var.set(current_month)
year_var.set(current_year)
month_box.config(textvariable=month_var)
year_box.config(textvariable=year_var)
Définir une fonction, fermer pour détruire l’affichage de la fenêtre, et quitter le programme.
def close():
guiWindow.destroy()
Initialiser l’instance Tkinter et afficher la fenêtre racine. Définissez le titre, les dimensions en pixels, et désactivez son redimensionnement en gardant les paramètres à 0.
if __name__ == "__main__":
guiWindow = Tk()
guiWindow.title("GUI Calendar")
guiWindow.geometry('500x550')
guiWindow.resizable(0, 0)
Définissez quatre cadres pour le titre de l’en-tête, la saisie du mois et de l’année, l’affichage et les boutons. Il remplit la fonction d’un conteneur, en dirigeant le placement des autres widgets. Il organise la mise en page et fournit un rembourrage pour ces widgets en utilisant des sections rectangulaires sur l’écran.
Organisez les cadres en blocs avant de les placer dans la fenêtre du gui à l’aide de la fonction pack() méthode. Définissez la valeur de expand sur true pour permettre au widget de redimensionner et de s’étendre dans son espace disponible. Définissez la valeur de remplir à ces deux attributs pour permettre au widget de s’étendre et d’occuper toute la fenêtre dans les directions x et y.
header_frame = Frame(guiWindow)
entry_frame = Frame(guiWindow)
result_frame = Frame(guiWindow)
button_frame = Frame(guiWindow)
header_frame.pack(expand=True, fill="both")
entry_frame.pack(expand=True, fill="both")
result_frame.pack(expand=True, fill="both")
button_frame.pack(expand=True, fill="both")
Spécifiez trois étiquettes pour l’en-tête, le mois et l’année. Définissez la fenêtre parent dans laquelle vous voulez le placer, le texte qu’il affichera, les styles de police ainsi que la couleur de la police. Emballez et placez les étiquettes à un endroit approprié. Associez IntVar() avec le cadre_d’entrée pour définir et recevoir des données entières.
header_label = Label(header_frame, text="CALENDAR",
font=('arial', '45', 'bold'), fg="#A020F0")
header_label.pack(expand=True, fill="both")
month_label = Label(entry_frame, text="Month:",
font=("arial", "20", "bold"), fg="#000000")
year_label = Label(entry_frame, text="Year:",
font=("arial", "20", "bold"), fg="#000000")
month_label.place(x=30, y=0)
year_label.place(x=275, y=0)
month_var = IntVar(entry_frame)
year_var = IntVar(entry_frame)
Obtenez le mois et l’année en cours et définissez-les dans la variable IntVar(). Utilisez le widget Spinbox pour spécifier une plage de valeurs à l’utilisateur. Définissez la plage de valeurs que la Spinbox contiendra, la largeur, la valeur actuelle qu’elle doit contenir et les styles de police. Positionnez les boîtes de manière appropriée.
current_month = date.today().month
current_year = date.today().year
month_var.set(current_month)
year_var.set(current_year)
month_box = Spinbox(entry_frame, from_=1, to=12, width="10",
textvariable=month_var, font=('arial','15'))
year_box = Spinbox(entry_frame, from_=0000, to=3000, width="10",
textvariable=year_var,font=('arial','15'))
month_box.place(x=130, y=5)
year_box.place(x=360, y=5)
Déclarez un champ de texte et définissez sa fenêtre parent, sa largeur, sa hauteur, son style de police, son style d’animation 3D et la largeur de sa bordure. Organisez le widget de texte et déclarez trois boutons pour afficher, réinitialiser et fermer la fenêtre. Les boutons contiennent une propriété supplémentaire de couleur d’arrière-plan et une propriété de commande.
À l’aide de la propriété command, vous pouvez définir la fonction que le bouton doit exécuter lorsqu’il est cliqué. Placez les boutons sur une seule rangée en laissant un espace suffisant entre chacun d’eux.
calendar_field = Text(result_frame, width=20, height=8,
font=("courier", "18"), relief=RIDGE, borderwidth=2)
calendar_field.pack()
display_button = Button(button_frame, text="DISPLAY", bg="#A020F0",
fg="#E0FFFF", command=printCalendar, font=('arial', '15'))
reset_button = Button(button_frame, text="RESET", bg="#A020F0",
fg="#E0FFFF", command=reset, font=('arial','15'))
close_button = Button(button_frame, text="CLOSE", bg="#A020F0",
fg="#E0FFFF", command=close, font=('arial','15'))
display_button.place(x=55, y=0)
reset_button.place(x=210, y=0)
close_button.place(x=350, y=0)
Le site mainloop() indique à Python d’exécuter la boucle d’événements de Tkinter et d’écouter les événements (comme les pressions sur les boutons) jusqu’à ce que vous fermiez la fenêtre.
guiWindow.mainloop()
Mettez tout le code ensemble pour voir votre calendrier GUI en action.
Exemple de sortie du calendrier GUI
En exécutant le programme ci-dessus, le programme affiche une fenêtre avec le mois et la date actuels. Le bouton Reset affiche le même écran lorsqu’il est cliqué.
En fixant le mois à 3 et l’année à 2000, le programme affiche le calendrier de mars 2000. En appuyant sur le bouton Fermer, le programme détruit la fenêtre et arrête son exécution.
Entreprendre des projets d’interface graphique pour débutants en utilisant Python
La création d’applications graphiques n’a jamais été aussi facile. Le module Tkinter de Python fournit de nombreux widgets utiles que vous pouvez entièrement personnaliser avec très peu de code. En plus de cela, vous avez accès à des gestionnaires de mise en page tels que pack, grid et place pour positionner les éléments selon vos désirs.
Vous pouvez construire un jeu de test de dactylographie, une palette de couleurs, un convertisseur de devises ou une calculatrice pour commencer. Ces applications sont amusantes à réaliser et vous permettront de développer facilement vos compétences en programmation orientée objet.