def wait(self):
self.fenetre.grab_set()
+ self.zone_texte.focus_set()
self.fenetre.wait_window(self.fenetre)
def quit(self):
""" Permet de sauvegarder le texte dans un fichier dont on a demandé le nom
à l'utilisateur """
file = asksaveasfilename(defaultextension = '.comm',
- initialdir = self.appli.CONFIGURATION.rep_user,
+ #initialdir = self.appli.CONFIGURATION.rep_user,
+ initialdir = self.appli.CONFIGURATION.initialdir,
title="Sauvegarde du "+self.titre)
if file != '':
if not save_in_file(file,self.texte) :
else:
showinfo("Sauvegarde effectuée","Sauvegarde effectuée dans le fichier %s" %file)
+class FenetreYesNo(Fenetre):
+ def __init__(self,appli,titre="",texte="",yes="Yes",no="No"):
+ self.appli=appli
+ self.fenetre = Toplevel()
+ self.fenetre.configure(width = 800,height=500)
+ self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+ self.fenetre.title(titre)
+ self.texte = string.replace(texte,'\r\n','\n')
+ self.titre = titre
+ fonte=fontes.standardcourier10
+ # définition des frames
+ self.frame_texte = Frame(self.fenetre)
+ self.frame_boutons = Frame(self.fenetre)
+ self.frame_boutons.place(relx=0,rely=0, relwidth=1.,relheight=0.1)
+ self.frame_texte.place( relx=0,rely=0.1, relwidth=1, relheight=0.9)
+ # définition de la zone texte et du scrollbar
+ self.zone_texte = Text(self.frame_texte,font=fonte)
+ self.zone_texte.bind("<Key-Prior>", self.page_up)
+ self.zone_texte.bind("<Key-Next>", self.page_down)
+ self.zone_texte.bind("<Key-Up>", self.unit_up)
+ self.zone_texte.bind("<Key-Down>", self.unit_down)
+ self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
+ #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview)
+ self.scroll_v.pack(side='right',fill ='y')
+ #self.scroll_h.pack(side='bottom',fill ='x')
+ self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
+ self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
+ # définition des boutons
+ self.but_yes = Button(self.frame_boutons,text = yes,command=self.yes)
+ self.but_no = Button(self.frame_boutons,text = no,command = self.no)
+ self.but_yes.place(relx=0.4,rely=0.5,anchor='center')
+ self.but_no.place(relx=0.6,rely=0.5,anchor='center')
+ # affichage du texte
+ self.affiche_texte(self.texte)
+ centerwindow(self.fenetre)
+
+ def yes(self):
+ self.result=1
+ self.quit()
+
+ def no(self):
+ self.result=0
+ self.quit()
+
class FenetreDeSelection(Fenetre):
""" Classe dérivée de Fenêtre permettant la récupération d'une zone de texte sélectionnée.\r
Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé.\r
def affiche_liste(self):
""" Affiche la liste dans la fenêtre"""
- i=0
+ liste_labels=[]
self.MCbox.config(state=NORMAL)
self.MCbox.delete(1.0,END)
for objet in self.liste :
elif type(objet) in (types.StringType,types.IntType):
mot = objet
elif type(objet) == types.FloatType :
- mot = repr_float(objet)
+ #mot = repr_float(objet)
+ mot = str(objet)
else:
mot=`objet`
label = Label(self.MCbox,
text = mot,
fg = 'black',bg = 'gray95',justify = 'left')
self.dico_labels[mot]=label
+ liste_labels.append(label)
self.MCbox.window_create(END,
window=label,
stretch = 1)
label.bind(self.liste_commandes[0][0],lambda e,s=self,c=self.liste_commandes[0][1],x=objet,l=label : s.selectitem(x,l,c))
label.bind(self.liste_commandes[1][0],lambda e,s=self,c=self.liste_commandes[1][1],x=objet,l=label : s.deselectitem(l,x,c))
label.bind(self.liste_commandes[2][0],lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitem(x,l,c))
- try :
- self.liste_marques.index(i)
- self.markitem(label)
- except:
+
+ for marque in self.liste_marques:
+ try:
+ self.markitem(liste_labels[marque])
+ except:
pass
- i=i+1
+
self.MCbox.config(state=DISABLED)
self.selection = None
def quit(self):
self.quit = 1
+
+class ListeChoixParGroupes(ListeChoix) :
+ """
+ Cette classe est utilisée pour afficher une liste de commandes classées par
+ groupes. L'utilisateur peut réaliser des actions de selection
+ qui déclenchent des actions spécifiées par les bindings contenus dans liste_commandes
+ """
+ def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[],
+ active ='oui',filtre='non',titre=''):
+ self.parent = parent
+ self.page = page
+ self.liste_groupes = liste_groupes
+ self.dict_groupes = dict_groupes
+ self.dico_labels={}
+ self.selection = None
+ self.liste_commandes = liste_commandes
+ self.liste_marques = liste_marques
+ self.arg_selected=''
+ self.active = active
+ self.titre = titre
+ self.filtre = filtre
+ self.init()
+
+ def affiche_liste(self):
+ """ Affiche la liste dans la fenêtre"""
+ liste_labels=[]
+ self.MCbox.config(state=NORMAL)
+ self.MCbox.delete(1.0,END)
+ for grp in self.liste_groupes:
+ # On itère sur les groupes
+ if grp == "CACHE":continue
+ liste_commandes=self.dict_groupes[grp]
+ text="GROUPE<<<<<<<< "+grp+" "
+ text=text+">"*max(0,30-len(text))
+ label = Label(self.MCbox,
+ text = text,
+ fg = 'black',bg = 'gray95',justify = 'left')
+ # On stocke la relation entre le nom de la commande et le label
+ self.dico_labels[grp]=label
+ liste_labels.append(label)
+ self.MCbox.window_create(END,
+ window=label,
+ stretch = 1)
+ self.MCbox.insert(END,'\n')
+ for cmd in liste_commandes:
+ label = Label(self.MCbox,
+ text = cmd,
+ fg = 'black',bg = 'gray95',justify = 'left')
+ # On stocke la relation entre le nom de la commande et le label
+ self.dico_labels[cmd]=label
+ self.MCbox.window_create(END,
+ window=label,
+ stretch = 1)
+ self.MCbox.insert(END,'\n')
+ if self.active == 'oui':
+ label.bind(self.liste_commandes[0][0],
+ lambda e,s=self,c=self.liste_commandes[0][1],x=cmd,l=label : s.selectitem(x,l,c))
+ label.bind(self.liste_commandes[1][0],
+ lambda e,s=self,c=self.liste_commandes[1][1],x=cmd,l=label : s.deselectitem(l,x,c))
+ label.bind(self.liste_commandes[2][0],
+ lambda e,s=self,c=self.liste_commandes[2][1],x=cmd,l=label : s.chooseitem(x,l,c))
+
+ for marque in self.liste_marques:
+ try:
+ self.markitem(liste_labels[marque])
+ except:
+ pass
+
+ self.MCbox.config(state=DISABLED)
+ self.selection = None
+
+ def entry_changed(self,event=None):
+ """
+ Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu
+ de l'entry et frappe <Return>
+ """
+ if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected])
+ filtre = self.entry.get()+"*"
+ FILTRE = string.upper(filtre)
+ #
+ # On cherche d'abord dans les noms de groupe
+ # puis dans les noms de commande groupe par groupe
+ #
+ for grp in self.liste_groupes:
+ if fnmatch.fnmatch(grp,filtre) or fnmatch.fnmatch(grp,FILTRE) :
+ index = self.MCbox.index(self.dico_labels[grp])
+ self.MCbox.see(index)
+ # On ne selectionne pas le groupe
+ #self.arg_selected = grp
+ # On a trouve un groupe on arrete la recherche
+ return
+
+ for grp in self.liste_groupes:
+ for cmd in self.dict_groupes[grp] :
+ if fnmatch.fnmatch(cmd,filtre) or fnmatch.fnmatch(cmd,FILTRE) :
+ self.highlightitem(self.dico_labels[cmd])
+ index = self.MCbox.index(self.dico_labels[cmd])
+ self.MCbox.see(index)
+ self.arg_selected = cmd
+ # On a trouve une commande on arrete la recherche
+ return
+