#Python : Programmer un calendrier-agenda

Bonjour,

Je suis en vacances depuis déjà deux bonnes semaines et je viens de réaliser que j’ai passé une bonne partie de mon temps libre à coder! Parfois, je me demande si ça ne tourne pas à l’obsession…

Bref, après le jeu du pendu, je me suis mis en tête de programmer un agendrier, c’est-à-dire un agenda-calendrier. J’ai terminé la première partie, à savoir le calendrier. Le résultat me comble de joie. Pourtant, au départ c’était loin d’être gagner.

agendrier

Le plus difficile a été d’instancier les numéros de semaine. Quelle galère! A ma grande surprise, j’ai découvert que certaines années comptaient 53 semaines, que la semaine 1 pouvait débuter en Décembre de l’année précédente et que la semaine 52 pouvait se terminer en Janvier de l’année suivante…. Tout en tenant compte des années bissextiles tous les quatre ans si l’année est divisible par 4 et non divisible par 100… Ou bien si l’année est divisible par 400!

Comme d’habitude, je me suis lancé dans l’érection d’une véritable usine à gaz jusqu’à ce que je découvre qu’il existait déjà des modules susceptibles de me faciliter la tâche. Merci donc aux modules monthcalendar et localtime. Je n’oublie pas non plus le module datetime et sa méthode isocalendar() laquelle fut d’un grand secours.

Il s’agit donc d’un calendrier dont chaque jour du mois est composé d’un bouton sur lequel on peut cliquer. A terme, ce clic est censé ouvrir la page d’agenda corrélative. Je dis « A terme » car je n’ai pas encore commencé à coder l’agenda. Ce sera la prochaine étape et pour ce faire, je souhaite exploiter toutes les possibilités offertes par le widget Text et ses méthodes. Du reste, ce sera l’objet d’un prochain article.

En attendant, voici le code du calendrier que vous pouvez utiliser et modifier comme bon vous semble.

//pastebin.com/embed_iframe/eXtcFgUN

5 commentaires sur “#Python : Programmer un calendrier-agenda

  1. J’aimerais bien utiliser votre script mais il fait un « from agenda import Agenda » qui ne semble pas connu de Python 2.7 que j’utilise. Pouvez-vous me dire où trouver ce script ? D’avance merci beaucoup. A. Ginestière (aginestiere@gmail.com)

    1. Bonjour,

      Pas de problème! Le code de l’agenda est dans l’article suivant :
      https://ordinosor.wordpress.com/2016/09/11/python-programmer-un-calendrier-agenda-2/

      Ce module n’est pas connu de python 2.7 pour la simple et bonne raison que c’est moi qui l’ait écrit.

      Je précise que mes codes sont en Python 3 (voir la première ligne de mes codes) mais si vous tournez sous Ubuntu par exemple, vous pouvez installer Python 3 très rapidement. Je crois même que c’est déjà installé.

      A la ligne 85, j’utilise une image qui représente une loupe pour l’onglet recherche. Il faudra donc modifier cette ligne pour importer vous-même une image de loupe que vous aurez placée quelque part dans vos dossiers. il faudra modifier le chemin.

      J’aimerais bien pouvoir envoyer facilement à quelqu’un un programme dans sa totalité (images comprises) mais je ne sais pas trop comment m’y prendre.

      Si vous rencontrez des soucis, n’hésitez pas à me contacter.

      Cordialement,

      Benoît.

  2. Salut
    Je suis bien intéressé par votre code Programmer un calendrier-agenda, mais mon python ne possède pas le module PIL.
    J’ai essayé de l’installer, mais l’installation semble impossible, j’ai un « Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)] on win32 »
    Merci de m’aider.

  3. Bonjour Monsieur,
    J’ai pu faire fonctionner votre programme Calendrier sans problème. Par contre, par rapport à l’Agenda, j’ai quelque soucis avec le module Recherche,. Voilà ce que le programme me renvoie comme message/

    Exception in Tkinter callback
    Traceback (most recent call last):
    File « C:\Program Files\Python37\lib\tkinter\__init__.py », line 1705, in __call__
    return self.func(*args)
    File « D:\Projets\Ephemeride\V06\agenda.py », line 117, in
    self.search = Button(self.search_labelframe, image=self.photo, bd=0, highlightthickness=0, command = lambda :self.find.search(self.search_entry))
    File « D:\Projets\Ephemeride\V06\agenda.py », line 428, in search
    if len(self.in_page.winfo_children()) == 1 :
    AttributeError: ‘Actions’ object has no attribute ‘in_page’

    Merci de m’éclairer.
    A bientôt!

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.