Advertisement
ERENARD63

exercice 13-22

Jan 28th, 2019
366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.47 KB | None | 0 0
  1. from tkinter import *
  2. # Module donnant accès aux boîtes de dialogue standard
  3. # pour la recherche de fichiers sur disque
  4.  
  5. from tkinter.filedialog import asksaveasfile, askopenfile
  6.  
  7. class Application(Frame):
  8.     '''Fenêtre d'application'''
  9.     def __init__(self):
  10.         Frame.__init__(self)
  11.         self.master.title("création d'un dictionnaire de couleur")
  12.         self.dico={}           # création d'un dictionnaire
  13.  
  14.  
  15.         # Les widgets sont regroupés dans deux cadres (Frames) :
  16.         frSup=Frame(self)          # cadre supérieur contenant 6 widgets
  17.         Label(frSup, text="Nom de la couleur",
  18.             width=20).grid(row=1, column=1)
  19.         self.enNom=Entry(frSup,width=25)        #champ d'entrée pour le nom de la couleur
  20.         self.enNom.grid(row=1,column=2)
  21.         Button(frSup,text="Existe déjà ?", width=12,command=self.chercheCoul).grid(row=1,column=3)
  22.         Label(frSup,text="Code hexa. correspondant :",
  23.         width=20).grid(row=2, column=1)
  24.         self.enCode=Entry(frSup,width=25)           # choix d'entrée pour le code hexa
  25.         self.enCode.grid(row=2,column=2)
  26.         Button(frSup, text="Test",width=12,
  27.         command=self.testeCoul).grid(row=2,column=3)
  28.         frSup.pack(padx=5,pady=5)
  29.  
  30.         frInf=Frame(self)           #cadre inférieur contenant le reste
  31.         self.test=Label(frInf,bg="white",width=45,      #zone de test
  32.             height=7,relief=SUNKEN)
  33.         self.test.pack(pady=5)
  34.         Button(frInf,text="Ajouter la couleur au dictionnaire",
  35.             command=self.ajouteCoul).pack()
  36.         Button(frInf,text="Enregistrer le dictionnaire", width=25,
  37.             command=self.enregistre).pack(side=LEFT,pady=5)
  38.         Button(frInf,text="Restaurer le dictionnaire", width=25,
  39.             command=self.restaure).pack(side=RIGHT,pady=5)
  40.         frInf.pack(padx=5,pady=5)
  41.         self.pack()
  42.  
  43.     def ajouteCoul(self):
  44.         "ajouter la couleur présente au dictionnaire"
  45.         if self.testeCoul()==0:             # une couleur a-t-elle été définie?
  46.             return
  47.         nom=self.enNom.get()
  48.         if len(nom)>2:
  49.             self.dico[nom]=self.cHexa
  50.         else:
  51.             self.test.config(text="%s : nom incorrect" % nom,bg="white")
  52.  
  53.     def chercheCoul(self):
  54.         "rechercher une couleur déjà inscrite au dictionnaire"
  55.         nom=self.enNom.get()
  56.         if nom in self.dico:
  57.             self.test.config(bg=self.dico[nom],text="")
  58.         else:
  59.             self.test.config(text="%s : couleur inconnue" % nom,bg="white")
  60.  
  61.     def testeCoul(self):
  62.         "vérifier la validité d'un code hexa - afficher la couleur correspondante"
  63.         try:
  64.             self.cHexa=self.enCode.get()
  65.             self.test.config(bg=self.cHexa,text="")
  66.             return 1
  67.         except:
  68.             self.test.config(text="Codage de couleur incorrect",bg="white")
  69.             return 0
  70.  
  71.     def enregistre(self):
  72.         "enregistrer le dictionnaire dans un fichier texte"
  73.         # cette méthode utilise une boîte de dialogue standard pour
  74.         # la sélection d'un fichier sur disque. Tkinter fournit tout une série
  75.         # de fonctions associées à ces boîtes, dans le module filedialog.
  76.         # La fonction ci-dessous renvoie un objet-fichier ouvert en écriture:
  77.         ofi=asksaveasfile(filetypes=[("Texte",".txt"),("Tous","*")])
  78.         for clef, valeur in list(self.dico.items()):
  79.             ofi.write("{0}   {1}\n".format(clef, valeur))
  80.         ofi.close()
  81.  
  82.     def restaure(self):
  83.         "restaurer le dictionnaire à partir d'un fichier de mémorisation"
  84.         # La fonction ci-dessous renvoie un objet-fichier ouvert en lecture:
  85.         ofi=askopenfile(filetypes=[("Texte",".txt"),("Tous")])
  86.         lignes = ofi.readlines()
  87.         for li in lignes:
  88.             cv= li.split()      # extraction de la clé de la valeur correspondante
  89.             self.dico[cv[0]]=cv[1]
  90.         ofi.close()
  91.  
  92. if __name__=='__main__':
  93.     Application().mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement