8 from centerwindow import centerwindow
10 class fenetre_mc_inconnus :
12 Cette classe sert à construire la fenêtre qui apparaît dans EFICAS
13 lorsque des mots-clés inconnus ont été trouvés dans le fichier de
14 commandes que l'on est en train de lire
16 def __init__(self,l_mc):
18 self.fenetre = Toplevel()
19 self.fenetre.geometry("400x400+0+0")
20 self.fenetre.title("Mots-clés inconnus dans le fichier de commandes")
26 centerwindow(self.fenetre)
30 Initialise les structures de données
34 self.new_l_mc.append(copy.copy(mc))
35 self.mc_courant = None
36 self.var_quit = IntVar(0)
37 self.entry_courante = None
39 def init_frames(self):
41 Création des 2 frames devant contenir le label et la liste des MC inconnus
43 self.frame1 = Frame(self.fenetre)
44 self.frame2 = Frame(self.fenetre)
45 self.frame3 = Frame(self.fenetre)
46 self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1)
47 self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1)
48 self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1)
49 self.frame21 = Frame(self.frame2)
50 self.frame22 = Frame(self.frame2)
51 self.frame21.place(relx=0,rely=0,relwidth=0.6,relheight=1)
52 self.frame22.place(relx=0.6,rely=0,relwidth=0.4,relheight=1)
56 Affichage du label dans la zone concernée
58 txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes."
59 txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
60 self.fenetre.update_idletasks()
63 wraplength = int(self.frame1.winfo_width()*0.8),
64 justify = 'center').place(relx=0.5,rely=0.5,anchor='center')
67 def init_liste_mc(self):
69 Affiche les mots-clés à modifier ou supprimer
73 # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ...
74 # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur
75 path_mc = self.get_path(mc[0:-2])
77 Label(self.frame21,text = path_mc).pack(side='left')
78 e = Entry(self.frame22)
81 e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
82 e.bind("<Return>",lambda e,s=self : s.modifie_mc())
83 e.configure(relief='flat',state='disabled')
85 def init_boutons(self):
87 Construit les boutons Modifier,Supprimer et Fermer
88 Les deux premiers sont inactifs tant qu'aucun mot-clé n'est sélectionné
90 self.b_mod = Button(self.frame3,
92 disabledforeground = 'grey35',
94 command = self.modifie_mc)
95 self.b_sup = Button(self.frame3,
97 disabledforeground = 'grey35',
99 command = self.supprime_mc)
100 self.b_quit = Button(self.frame3,
103 self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
104 self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
105 self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
107 def wait_new_list(self):
109 Cette méthode rend cette toplevel bloquante.
110 Dès que la variable var_quit est modifiée, on continue l'exécution de cette
111 méthode (et on quitte)
113 self.fenetre.wait_variable(self.var_quit)
114 self.fenetre.destroy()
117 def get_path(self,l_o):
119 Construit la chaîne de caractère contenant le chemin d'accès complet du mot-clé
124 txt = txt + o.nom+'/'
125 # on enlève le dernier slash en trop
129 def select_mc(self,mc,entry):
131 Enregistre le mot-clé passé en argument comme mot-clé courant
132 Active les boutons Modifier et Supprimer
134 self.desactive_entry()
136 self.entry_courante = entry
137 self.active_boutons()
140 def modifie_mc(self):
142 Modifie le nom du mot-clé en prenant la nouvelle valeur lue dans entry_courante
144 new_nom_mc = self.entry_courante.get()
145 index = self.l_mc.index(self.mc_courant)
146 new_mc = self.new_l_mc[index]
147 new_mc[-2] = new_nom_mc
148 objet_pere = self.mc_courant[-3]
150 self.desactive_boutons()
151 self.desactive_entry()
153 def supprime_mc(self):
155 Supprime le mot-clé courant de la liste
157 index = self.l_mc.index(self.mc_courant)
158 self.new_l_mc[index] = None
159 self.desactive_boutons()
160 self.desactive_entry()
162 def desactive_boutons(self):
164 Désactive les boutons Modifier et Supprimer
166 self.b_mod.configure(state='disabled')
167 self.b_sup.configure(state='disabled')
169 def active_boutons(self):
171 Active les boutons Modifier et Supprimer
173 self.b_mod.configure(state='normal')
174 self.b_sup.configure(state='normal')
176 def desactive_entry(self):
178 Désactive l'entry courante si elle existe
180 if self.entry_courante :
181 self.entry_courante.configure(state='disabled',relief='flat')
183 def active_entry(self):
185 Active l'entry courante si elle existe
187 if self.entry_courante :
188 self.entry_courante.configure(state='normal',relief='sunken')
192 Permet de fermer la fenêtre
196 if __name__ == '__main__':
197 fenetre_mc_inconnus(('toto','titi'))