Bonjour,
Je pense qu'il y a 2 ou 3 soucis dans le code.
enCode est un paramètre de l'objet de type Application, mais jamais vous n'instanciez cet objet, j'aurais écris à la fin :
X= Application() X.mainloop()Du coup vous pouvez utiliser X.enCode....
Ensuite dans la définition de enCode, vous mettez :
self.enCode = Entry(frSup,width=25).grid(row=2, column=2)Donc enCode reçoit ce qui est retourné par grid(...), c'est à dire rien (None). Il faut le faire en 2 lignes :
self.enCode = Entry(frSup,width=25) enCode.grid(row=2, column=2)
merci beaucoup
]]>self.enCode.bind("<Return>",testeCoul)
mais je n'ai pas encore essayé.
]]>Je pense qu'il y a 2 ou 3 soucis dans le code.
enCode est un paramètre de l'objet de type Application, mais jamais vous n'instanciez cet objet, j'aurais écris à la fin :
X= Application() X.mainloop()
Du coup vous pouvez utiliser X.enCode....
Ensuite dans la définition de enCode, vous mettez :
self.enCode = Entry(frSup,width=25).grid(row=2, column=2)
Donc enCode reçoit ce qui est retourné par grid(...), c'est à dire rien (None). Il faut le faire en 2 lignes :
self.enCode = Entry(frSup,width=25) enCode.grid(row=2, column=2)
Vincent
]]>from tkinter import * # module donnant accés aux boites de dialogue standard pour la recherche de fichier sur disque from tkinter.filedialog import asksaveasfile,askopenfile class Application(Frame): " Fenetre d application" def __init__(self): Frame.__init__(self) self.master.title("Création d'un dictionnaire de couleurs") self.dico = {} # création du dictionnaire # les widgets sont regroupés dans deux cadres ( Frames) : frSup =Frame(self) # cadre superieur contenant 6 widgets Label(frSup, text = "Nom de la couleur :", width = 20).grid(row =1, column=1) self.enNom =Entry(frSup, width =25) # champ d'entrée pour le nom de la couleur self.enNom.grid(row=1, column=2) Button(frSup, text="Existe déjà ?", width =12, command = self.chercheCoul).grid(row=1, column=3) Label(frSup, text="code hexa corresp :", width = 20).grid(row=2, column=1) self.enCode = Entry(frSup,width=25).grid(row=2, column=2) # champ d'entrée pour le code hexa Button(frSup, text="test", width=12, command=self.testeCoul).grid(row=2, column=3) frSup.pack(padx=5, pady=5) frInf =Frame(self) # cadre inferieur pour le reste self.test = Label(frInf, bg="white",width=45, height=7, relief = SUNKEN) self.test.pack(pady=5) Button(frInf, text="Ajouter la couleur au dictionnaire",command=self.ajouteCoul).pack() Button(frInf, text="Enregistrer le dictionnaire",width=25, command=self.enregistre).pack(side=LEFT,pady=5) Button(frInf, text="Restaurer le dictionnaire",width=25, command=self.restaure).pack(side=RIGHT, pady=5) frInf.pack(padx=5, pady=5) self.pack() def ajouteCoul(self): " ajouter la couleur présente au dictionnaire" if self.testeCoul() ==0: # une couleur a t elle été définie ? return nom = self.enNom.get() if len(nom)>1: # refuser les noms trop petits self.dico[nom] = self.cHexa else: self.test.config(text= "%s : nom incorect" % nom, bg='white') def chercheCoul(self): " rechercher une couleur déjà inscrite dans le dictionnaire" nom= self.enNom.get() if nom in self.dico: self.test.config(bg=self.dico[nom], text="") else: self.test.config(text = "%s : couleur inconue" % nom, bg='white') def testeCoul(self): " verifier la validite d un code hexa Afficher la couleur correspondante" try: self.cHexa = self.enCode.get() self.test.config(bg=self.cHexa, text="") return 1 except: self.test.config(text="Codage de couleur incorect", bg='white') return 0 def enregistre(self): " enregistrer le dictionnaire dans un fichier texte" # cette méthode utilise une boite de dialogue standard pour la # sélection d'un fichier sur disque. tkinter fournit toute une serie # de fonction associées à ces boites dans le module 'filedialog'. # La fonction ci dessous renvoie un objet fichier ouvert en écriture: ofi = asksaveasfile(filetypes=[("Texte",".txt"),("Tous","*")]) for clef, valeur in list(self.dico.items()): ofi.write("{0} {1}\n".format(clef, valeur)) ofi.close() def restaure(self): "la fonctionci dessous renvoie un objet fichier ouvert en lecture :" ofi = askopenfile(filetypes=[("Texte","txt"),("Tous","*")]) lignes = ofi.readlines() for li in lignes: cv = li.split() # extraction de la clef de la valeeuer self.dico[cv[0]] = cv[1] ofi.close() if __name__ == '__main__': Application().mainloop()