
1 - Création de l’arborescence du système
Avant de commencer à coder, vous devez faire une conception de votre système. Nous vous proposons la suivante:

- library : représente le répertoire des librairies du système ( modules et classes). Ce répertoire contient un fichier vide nommé __init__.py qui indique à l'interpréteur de Python qu'il s'agit du répertoire d'un module.
- library.py : représente la bibliothèque du système qui va contenir toutes les classes Python nécessaire au fonctionnement du système.
- main.py : représente le fichier principal avec lequel démarre le système. Ce fichier ne contient que très peu de code, généralement les instances des classes qui se trouvent sur la bibliothèque library.py
2- Le code du fichier library.py
2.1 Importation de la bibliothèque tkinter
L'éditeur que nous souhaitons créer, manipule des objets graphique: fenêtres, boutons, labels, boite de dialogue...Pour cela nous devons importer une bibliothèque graphique. Nous utilisons la bibliothèque Tkinter pour ce projet:
from tkinter import *
import os
savedFile = {1:""}
NB :
la troisième ligne nous permettra de stocker les objets files qui ne tiennent pas dans une instance de classe.
2.2- Création de la classe principale du fichier library.py
from tkinter import *
import os
savedFile = {1:""}
class Win:
def __init__(self,master,content):
# Fenêtre principale
self.master = master
# Main Text Widget
self.content=content
# Création de la fenêtre tkinter
def create(self):
self.master = Tk()
self.master.title("Editeur de Texte")
self.master.geometry("700x550")
# Méthode qui ajoute la zone de texte
def add_text(self):
self.content = Text(self.master)
self.content.pack(expand=1,fill='both')
# Génération de la fenêtre principale
def generate(self):
self.master.mainloop()
2.3- Ajout des menus
Pour bien comprendre la méthode d'ajout des menus, veuillez réviser le tutoriel(page18) sur les menus. Nous passons directement au code qui permet d'ajouter une méthode add_menu( ) qui permet de jouer l'affaire:
def add_menu(self):
# 1 - Création de la barre des menus
menuBar = Menu(self.master)
# 2 - Création du menu Fichier
menuFichier = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Fichier", menu=menuFichier)
# Création des sous menus du menu Fichier
menuFichier.add_command(label="Nouveau", command=self.nouveau)
menuFichier.add_command(label="Ouvrir", command=self.fopen)
menuFichier.add_command(label="Enregistrer", command=self.save)
menuFichier.add_command(label="Enregistrer sous", command=self.saveAs)
menuFichier.add_command(label="Quitter", command = self.quitter)
#3 - Création du Menu Edition
menuEdition= Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Edition ", menu=menuEdition)
menuEdition.add_command(label="Annuler")
menuEdition.add_command(label="Rétablir")
menuEdition.add_command(label="Copier", command=self.copy)
menuEdition.add_command(label="Couper", command = self.cut)
menuEdition.add_command(label="Coller", command=self.past)
#4 - Création du Menu Outils
menuOutils = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Outils", menu = menuOutils)
menuOutils.add_command(label="Préférences")
# Création du Menu Aide
menuAide = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Aide", menu = menuAide)
menuAide.add_command(label="A propos")
self.master.config(menu = menuBar)
2.4 - Ajout de commandes pour les menus
Jusqu'à présent les menus crées ne sont pas fonctionnels, puisque nous leura avons pas encore crée des commandes ! Nous devons donc associer à chaque menu une commande :
command = nom_de_la_commande
Nous devons ensuite créer une action pour chaque commande et qui porte le même nom :
def nom_de_la_commande():
#code de l'action ici
Code des actions des menus
#======================================
# - Définition des actions des menus
#======================================
#------------------------------ #
- actions du menu Fichier
#-------------------------------
def quitter(self):
self.master.quit()
def nouveau(self):
os.popen("python main.py")
def fopen(self):
file = self.master.filename = filedialog.askopenfilename(initialdir = "/",title = "Select File",filetypes = (("Text Files","*.txt"),("all files","*.*")))
fp = open(file,"r")
r = fp.read()
self.content.insert(1.0,r)
# Menu Enregistrer sous
def saveAs(self):
# create save dialog
fichier=self.master.filename=filedialog.asksaveasfilename(initialdir = "/",title = "Enregistrer Sous\ ",filetypes = (("Fichier Texte","*.txt"), ("Tous les fichiers","*.*")))
fichier = fichier + ".txt"
# Utilisation du dictionnaire pour stocker le fichier
savedFile[1] = fichier
f = open(fichier,"w")
s = self.content.get("1.0",END)
f.write(s)
f.close()
# menu Enregistrer
def save(self):
if(savedFile[1] ==""):
self.saveAs()
else:
f = open(savedFile[1],"w")
s = self.content.get("1.0",END)
f.write(s)
f.close()
#------------------------------
# - actions du menu Edition
#------------------------------
def copy(self):
self.content.clipboard_clear()
self.content.clipboard_append(self.content.selection_get())
def past(self):
self.content.insert(INSERT, self.content.clipboard_get())
def cut(self):
self.copy()
self.content.delete("sel.first","sel.last")
Remarque
Les actions associées aux menus doivent être placées avant les fonctions qui définissent les menus
2.5- Code final du fichier library.py (Code sur pastbin )
# -*- coding: utf-8 -*-
#------------------------------
# Author : Y. DERFOUFI
# Author Title : Professeur Agrégé de mathématiques & Docteur en Math-Informatiques
# Compagny : CRMEF OUJDA
#-----------------------------
from tkinter import *
import os
savedFile = {1:""}
#======================================
# 1 - Classe de la fenêtre pricipale
#======================================
class Win:
def __init__(self,master,content):
# Fenêtre principale
self.master = master
# Main Text Widget
self.content=content
# Création de la fenêtre tkinter
def create(self):
self.master = Tk()
self.master.title("Editeur de Texte")
self.master.geometry("700x550")
# Méthode qui ajoute la zone de texte
def add_text(self):
self.content = Text(self.master)
self.content.pack(expand=1,fill='both')
# Génération de la fenêtre principale
def generate(self):
self.master.mainloop()
#======================================
# 2 - Définition des actions des menus
#======================================
#------------------------------
# 2.1 - actions du menu Fichier
#-------------------------------
def quitter(self):
self.master.quit()
def nouveau(self):
os.popen("python main.py")
def fopen(self):
file = self.master.filename = filedialog.askopenfilename(initialdir = "/",title = "Select File",filetypes = (("Text Files","*.txt"),("all files","*.*")))
fp = open(file,"r")
r = fp.read()
self.content.insert(1.0,r)
# Menu Enregistrer sous
def saveAs(self):
# create save dialog
fichier=self.master.filename=filedialog.asksaveasfilename(initialdir = "/",title = "Enregistrer Sous\ ",filetypes = (("Fichier Texte","*.txt"), ("Tous les fichiers","*.*")))
fichier = fichier + ".txt"
# Utilisation du dictionnaire pour stocker le fichier
savedFile[1] = fichier
f = open(fichier,"w")
s = self.content.get("1.0",END)
f.write(s)
f.close()
# menu Enregistrer
def save(self):
if(savedFile[1] ==""):
self.saveAs()
else:
f = open(savedFile[1],"w")
s = self.content.get("1.0",END)
f.write(s)
f.close()
#------------------------------
# 2.2 - actions du menu Edition
#------------------------------
def copy(self):
self.content.clipboard_clear()
self.content.clipboard_append(self.content.selection_get())
def past(self):
self.content.insert(INSERT, self.content.clipboard_get())
def cut(self):
self.copy()
self.content.delete("sel.first","sel.last")
#======================================
# 2 - Méthodes d'ajout des menus
#======================================
def add_menu(self):
# 1 - Création de la barre des menus
menuBar = Menu(self.master)
# 2 - Création du menu Fichier
menuFichier = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Fichier", menu=menuFichier)
# Création des sous menus du menu Fichier
menuFichier.add_command(label="Nouveau", command=self.nouveau)
menuFichier.add_command(label="Ouvrir", command=self.fopen)
menuFichier.add_command(label="Enregistrer", command=self.save)
menuFichier.add_command(label="Enregistrer sous", command=self.saveAs)
menuFichier.add_command(label="Quitter", command = self.quitter)
#3 - Création du Menu Edition
menuEdition= Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Edition ", menu=menuEdition)
menuEdition.add_command(label="Annuler")
menuEdition.add_command(label="Rétablir")
menuEdition.add_command(label="Copier", command=self.copy)
menuEdition.add_command(label="Couper", command = self.cut)
menuEdition.add_command(label="Coller", command=self.past)
#4 - Création du Menu Outils
menuOutils = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Outils", menu = menuOutils)
menuOutils.add_command(label="Préférences")
# Création du Menu Aide
menuAide = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Aide", menu = menuAide)
menuAide.add_command(label="A propos")
self.master.config(menu = menuBar)
3- Code du fichier principal main.py (Code sur pastbin)
# -*- coding: utf-8 -*-
# Importation des bibliothèques nécessaires
from tkinter import *
from tkinter import filedialog
# Importation du module library.py
from library.library import*
# Création du dictionnaire qui stock les objets files
savedFile = {1:""}
# Création d'une instance sur la classe principale
root = Win("root","c")
# Appel des méthodes qui créent l'objet fenêtre avec tous ces composants
root.create()
root.add_text()
root.add_menu()
root.generate()
4 - Aperçu de l'éditeur
Si vous avez bien codé votre système et que tout va bien, voici l'aperçu de votre petit éditeur de texte :

Télécharger le projet

Younes Derfoufi
CRMEF OUJDA
Post Views: 17 986
enfaite faut exécuter quoi le main ou le library
Exécuter le main.py ( main veut dire en anglais : principal)