1. Introduction
Le programme PEDI est une application de type éditeur de texte créée à l’aide de Tkinter (bibliothèque d’interface graphique de Python). Elle est principalement conçue pour éditer des fichiers Python, avec des fonctionnalités telles que l’ouverture de plusieurs fichiers dans des onglets, la coloration syntaxique, la gestion de sessions précédentes, et une fenêtre de recherche pour le texte. Ce programme supporte également les raccourcis clavier pour des actions courantes comme la sauvegarde et la recherche.
2. Fonctionnalités
- Édition de texte multi-onglets : possibilité d’ouvrir plusieurs fichiers simultanément, chaque fichier étant affiché dans un onglet distinct.
- Coloration syntaxique : basée sur la syntaxe Python, elle colore les mots-clés, chaînes, commentaires, et nombres pour faciliter la lecture du code.
- Recherche dans le texte : possibilité de rechercher du texte dans un fichier ouvert avec surlignage des occurrences trouvées.
- Sauvegarde automatique de session : les fichiers ouverts sont mémorisés et restaurés lors de la prochaine ouverture du programme.
- Sauvegarde et ouverture de fichiers : possibilité de sauvegarder un fichier spécifique ou tous les fichiers ouverts. L’utilisateur peut également ouvrir de nouveaux fichiers.
- Gestion de la géométrie de la fenêtre : la taille et la position de la fenêtre sont sauvegardées et restaurées.
- Raccourcis clavier : certains raccourcis (comme
Ctrl+S
pour sauvegarder,Ctrl+F
pour rechercher) facilitent l’usage du programme.
3. Structure du Programme
3.1. Classe principale : TextEditor
La classe TextEditor hérite de tk.Tk
et gère l’ensemble de la logique de l’application. Voici une vue d’ensemble des méthodes principales de la classe.
3.2. Méthodes principales
3.2.1. __init__(self)
Le constructeur initialise l’interface principale :
- Charge les paramètres de configuration via
load_config()
. - Initialise les onglets avec
ttk.Notebook
pour gérer plusieurs fichiers ouverts. - Charge la géométrie de la fenêtre depuis un fichier de configuration JSON.
- Active les raccourcis clavier pour la sauvegarde (
Ctrl+S
) et la recherche (Ctrl+F
).
3.2.2. load_config(self)
Charge les paramètres de la fenêtre depuis un fichier config.ini
. Par exemple, le titre de la fenêtre est paramétrable.
3.2.3. search_text(self, search_term)
Recherche et surligne un terme dans le fichier ouvert. Le texte trouvé est mis en surbrillance avec un fond jaune.
3.2.4. open_search_window(self)
Ouvre une fenêtre secondaire permettant à l’utilisateur d’entrer un terme à rechercher. Le champ de saisie reçoit automatiquement le focus.
3.2.5. save_window_geometry(self)
et load_window_geometry(self)
Ces deux méthodes permettent de sauvegarder et restaurer la taille et la position de la fenêtre dans un fichier JSON. Cela permet à l’application de rétablir la disposition précédente lors de l’ouverture suivante.
3.2.6. new_file(self)
Crée un nouvel onglet vide, prêt pour la saisie d’un nouveau fichier.
3.2.7. open_file(self, filepath=None)
Ouvre un fichier existant sélectionné par l’utilisateur et en affiche le contenu dans un nouvel onglet. Le fichier est ajouté à la liste des fichiers ouverts, et sa syntaxe est automatiquement colorée.
3.2.8. save_file(self, tab_id)
Sauvegarde le contenu d’un onglet donné dans le fichier associé. Si aucun fichier n’est associé, une boîte de dialogue de sauvegarde est présentée à l’utilisateur.
3.2.9. save_all(self)
Sauvegarde tous les fichiers ouverts dans l’éditeur. Si certains fichiers ont été modifiés mais pas encore sauvegardés, une boîte de dialogue apparaît pour confirmer la sauvegarde.
3.2.10. close_tab(self, tab_id)
Ferme un onglet et demande à l’utilisateur de sauvegarder les modifications si nécessaire.
3.2.11. colorize_syntax(self, text_widget)
Applique la coloration syntaxique au texte de l’onglet actuel. Utilise Pygments pour colorer les commentaires, chaînes, mots-clés, et autres éléments du code Python.
3.2.12. load_last_session(self)
et save_session(self)
Ces méthodes permettent de restaurer les fichiers ouverts lors de la session précédente (stockés dans un fichier session.pkl
) et de sauvegarder la liste des fichiers ouverts à la fermeture du programme.
3.2.13. on_closing(self)
Méthode appelée lors de la fermeture de la fenêtre. Elle sauvegarde les fichiers, la session actuelle, et la géométrie de la fenêtre avant de fermer l’application.
3.3. Gestion des événements
Les événements sont gérés via des bindings sur les widgets Tkinter :
- Raccourcis clavier (
Ctrl+S
,Ctrl+F
). - Défilement des lignes avec la molette de la souris.
- Gestion des modifications : l’interface signale les modifications des fichiers avec une étoile (
*
) dans le nom de l’onglet.
3.4. Sauvegarde et ouverture de fichiers
Le programme utilise filedialog
pour ouvrir et sauvegarder des fichiers :
- Lors de l’ouverture de fichier, l’utilisateur peut choisir parmi des types spécifiques (
.py
outous les fichiers
). - Lors de la sauvegarde, un fichier de destination est demandé si le fichier n’a pas encore été enregistré.
Le programme pedi utilise plusieurs modules et bibliothèques externes, ainsi que des bibliothèques intégrées de Python. Voici un récapitulatif des dépendances :
a. Dépendances internes à Python
Ces bibliothèques sont fournies par défaut avec toute installation de Python.
tkinter
: La bibliothèque standard pour créer des interfaces graphiques en Python.tk.Tk
,ttk.Notebook
,filedialog
,messagebox
: Utilisés pour la création de la fenêtre principale, des onglets, des boîtes de dialogue de fichiers, et des boîtes de message.
os
: Utilisé pour des opérations de gestion de fichiers et de répertoires, comme la récupération du chemin du fichier.json
: Utilisé pour lire et écrire des fichiers de configuration en format JSON, notamment pour sauvegarder/restaurer la géométrie de la fenêtre.pickle
: Utilisé pour sérialiser et désérialiser les objets Python, notamment pour sauvegarder/restaurer la session de fichiers ouverts.re
: Utilisé pour la gestion de recherches de texte avec des expressions régulières.configparser
: Utilisé pour lire les fichiers de configuration.ini
qui permettent de définir certains paramètres (comme le titre de la fenêtre).
b. Dépendances externes
Ces bibliothèques doivent être installées séparément, car elles ne sont pas incluses par défaut avec Python.
pygments
: Bibliothèque externe pour la coloration syntaxique. Elle fournit les lexers nécessaires pour identifier et colorer les différentes parties du code Python.PythonLexer
: Utilisé pour analyser et tokeniser le code Python.Token
: Utilisé pour appliquer la coloration syntaxique en fonction des types de jetons (mots-clés, chaînes, commentaires, etc.).
c. Installation des dépendances externes
Les dépendances externes comme Pygments doivent être installées avec pip
:
d. Fichier config.ini
Ce programme attend l’existence d’un fichier config.ini
pour configurer certains aspects, comme le titre de la fenêtre. Voici un exemple minimal de ce fichier :