import Pmw
import os,sys,re,string
import types,fnmatch
+import traceback
from tkFileDialog import *
from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
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_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit)
+ self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit,default='active')
self.but_save = Button(self.frame_boutons,text = "sauver",command = self.save)
self.but_quit.place(relx=0.4,rely=0.5,anchor='center')
self.but_save.place(relx=0.6,rely=0.5,anchor='center')
# affichage du texte
self.affiche_texte(self.texte)
+ self.zone_texte.config(state=DISABLED)
centerwindow(self.fenetre)
self.fenetre.deiconify()
if len(item[0])>length_maxi : length_maxi = len(item[0])
window = self.fenetre.interior()
for item in self.items :
- label,nature,nom_var,defaut = item
+ if len(item) == 4 :
+ label,nature,nom_var,defaut = item
+ chaine="Yes"
+ chaine2="No"
+ else :
+ label,nature,nom_var,defaut,chaine,chaine2 = item
# création de la frame
fr_item = Frame(window,height=40,width=700)
fr_item.pack(side='top',fill='x',expand=1)
setattr(self,'item_'+nom_var,var)
var.set(defaut)
# création du radiobouton
- rb1 = Radiobutton(fr_item,text='OUI',variable=var,value='OUI')
- rb2 = Radiobutton(fr_item,text='NON',variable=var,value='NON')
+ rb1 = Radiobutton(fr_item,text=chaine,variable=var,value='OUI')
+ rb2 = Radiobutton(fr_item,text=chaine2,variable=var,value='NON')
rb1.place(relx=0.65,rely=0.5,anchor='center')
rb2.place(relx=0.80,rely=0.5,anchor='center')
self.widgets.append((rb1,rb2))
class ListeChoix :
""" Cette classe est utilisée pour afficher une liste de choix passée en paramètre
en passant les commandes à lancer suivant différents bindings """
- def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre='',optionReturn=None, fonte_titre=fontes.standard_gras_souligne):
+ def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre='',
+ optionReturn=None, fonte_titre=fontes.standard_gras_souligne):
self.parent = parent
self.page = page
self.liste = liste
label.bind("<Return>",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c))
label.bind("<KP_Enter>",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c))
label.bind("<Key-Right>",lambda e,s=self,x=objet,l=label : s.selectNextItem(x,l))
+ label.bind("<Key-Down>",lambda e, s=self,x=objet,l=label : s.selectNextItem(x,l))
label.bind("<Key-Left>" ,lambda e,s=self,x=objet,l=label : s.selectPrevItem(x,l))
+ label.bind("<Key-Up>" ,lambda e,s=self,x=objet,l=label : s.selectPrevItem(x,l))
if self.active == 'oui':
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))
self.MCbox.config(state=DISABLED)
self.selection = None
+ self.dontselect=0
+ for event,callback in self.liste_commandes:
+ if event == "<Enter>":
+ self.selection=None,None,callback
+ break
def clear_marque(self):
try:
except AsException,e:
raison=str(e)
showerror(raison.split('\n')[0],raison)
-
+
def selectNextItem(self,mot,label):
- try :
- index=self.liste.index(mot)
- indexsuivant=index+1
- if indexsuivant > len(self.liste) -1:
- indexsuivant=0
- motsuivant=self.liste[indexsuivant]
- labelsuivant=self.dico_labels[motsuivant]
- self.clear_marque()
- if self.selection != None :
- self.deselectitem(self.selection[1],self.selection[0],self.selection[2],)
- self.selection = (mot,label,self.selection[2])
- index = self.MCbox.index(labelsuivant)
- self.MCbox.see(index)
- self.highlightitem(labelsuivant)
- self.arg_selected=motsuivant
- labelsuivant.focus_set()
- # PN il faut faire quelque chose pour être dans la fenetre
- except:
- pass
+ index=self.liste.index(mot)
+ indexsuivant=index+1
+ if indexsuivant > len(self.liste) -1:
+ indexsuivant=0
+ motsuivant=self.liste[indexsuivant]
+ labelsuivant=self.dico_labels[motsuivant]
+ index = self.MCbox.index(labelsuivant)
+ self.MCbox.see(index)
+ self.selectthis(motsuivant,labelsuivant,self.selection[2],)
+ self.dontselect=1
def selectPrevItem(self,mot,label):
- try :
- index=self.liste.index(mot)
- indexprec=index-1
- motprec=self.liste[indexprec]
- labelprec=self.dico_labels[motprec]
- self.clear_marque()
- if self.selection != None :
- self.deselectitem(self.selection[1],self.selection[0],self.selection[2],)
- self.selection = (mot,label,self.selection[2])
- index = self.MCbox.index(labelprec)
- self.MCbox.see(index)
- self.highlightitem(labelprec)
- self.arg_selected=motprec
- labelprec.focus_set()
- # PN il faut faire quelque chose pour être dans la fenetre
- except:
- pass
-
+ index=self.liste.index(mot)
+ indexprec=index-1
+ motprec=self.liste[indexprec]
+ labelprec=self.dico_labels[motprec]
+ index = self.MCbox.index(labelprec)
+ self.MCbox.see(index)
+ self.selectthis(motprec,labelprec,self.selection[2],)
+ self.dontselect=1
- def selectitem(self,mot,label,commande) :
- """ Met l'item sélectionné (représenté par son label) en surbrillance
- et lance la commande associée au double-clic"""
+ def selectthis(self,mot,label,commande) :
self.clear_marque()
if self.selection != None :
self.deselectitem(self.selection[1],self.selection[0],self.selection[2],)
self.highlightitem(label)
self.selection = (mot,label,commande)
self.arg_selected = mot
- commande(mot)
+ if commande : commande(mot)
+
+ def selectitem(self,mot,label,commande) :
+ """ Met l'item sélectionné (représenté par son label) en surbrillance
+ et lance la commande associée au double-clic"""
+ if self.dontselect:
+ self.dontselect=0
+ return
+ self.selectthis(mot,label,commande)
def highlightitem(self,label) :
""" Met l'item représenté par son label en surbrillance """
def deselectitem(self,label,mot='',commande=None) :
""" Remet l'item (représenté par son label) en noir"""
- label.configure(bg='gray95',fg='black')
+ if label:label.configure(bg='gray95',fg='black')
self.arg_selected = ''
- if commande != None : commande(mot)
+ if commande and mot : commande(mot)
def cherche_selected_item(self):
index=self.MCbox.index(self.selection[1])
return lign
def remove_selected_item(self):
- index=self.MCbox.index(self.selection[1])
+ try :
+ index=self.MCbox.index(self.selection[1])
+ except :
+ index=self.MCbox.index(self.dico_labels[self.arg_selected] )
lign,col=map(int,string.split(index,'.'))
del self.liste[lign-1]
self.affiche_liste()
FILTRE = string.upper(filtre)
for arg in self.liste :
if fnmatch.fnmatch(arg,filtre) or fnmatch.fnmatch(arg,FILTRE) :
- self.highlightitem(self.dico_labels[arg])
- index = self.MCbox.index(self.dico_labels[arg])
+ label=self.dico_labels[arg]
+ index = self.MCbox.index(label)
self.MCbox.see(index)
- self.arg_selected = arg
- self.dico_labels[self.arg_selected].focus_set()
+ self.selectitem(arg,label,self.selection[2])
break
#try :
#except :
#pass
- def get_liste_BAK(self):
- raise "OBSOLETE"
- return self.liste
# PN attention à la gestion des paramétres
# cela retourne H = 1 , et ni H, ni 1
"""
def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[],
- active ='oui',filtre='non',titre='',optionReturn=None):
+ active ='oui',filtre='non',titre='',optionReturn=None,fonte_titre=fontes.standard_gras_souligne):
self.parent = parent
self.page = page
self.liste_groupes = liste_groupes
self.titre = titre
self.filtre = filtre
self.optionReturn = optionReturn
+ self.fonte_titre=fonte_titre
self.init()
def affiche_liste(self):
self.MCbox.config(state=DISABLED)
self.selection = None
+ self.dontselect=0
+ for event,callback in self.liste_commandes:
+ if event == "<Enter>":
+ self.selection=None,None,callback
+ break
def selectPrevItem(self,mot,label,callback,group,cmd):
g=self.liste_groupes.index(group)
else:
# debut des groupes. On ne fait rien
return
-
# On a trouve l'item precedent
- self.clear_marque()
labelsuivant=self.dico_labels[co]
- if self.selection != None :
- self.deselectitem(self.selection[1],self.selection[0],self.selection[2],)
- self.selection = (co,labelsuivant,self.selection[2])
index = self.MCbox.index(labelsuivant)
self.MCbox.see(index)
- self.arg_selected=co
- self.highlightitem(labelsuivant)
- labelsuivant.focus_set()
- callback(co)
+ self.selectthis(co,labelsuivant,self.selection[2],)
+ self.dontselect=1
def selectNextItem(self,mot,label,callback,group,cmd):
g=self.liste_groupes.index(group)
# fin des groupes. On ne fait rien
return
# On a trouve l'item suivant
- self.clear_marque()
labelsuivant=self.dico_labels[co]
- if self.selection != None :
- self.deselectitem(self.selection[1],self.selection[0],self.selection[2],)
- self.selection = (co,labelsuivant,self.selection[2])
index = self.MCbox.index(labelsuivant)
self.MCbox.see(index)
- self.arg_selected=co
- self.highlightitem(labelsuivant)
- labelsuivant.focus_set()
- callback(co)
+ self.selectthis(co,labelsuivant,self.selection[2],)
+ self.dontselect=1
def entry_changed(self,event=None):
"""
#
for grp in self.liste_groupes:
if fnmatch.fnmatch(grp,filtre) or fnmatch.fnmatch(grp,FILTRE) :
- self.highlightitem(self.dico_labels[grp])
- index = self.MCbox.index(self.dico_labels[grp])
+ cmd=self.dict_groupes[grp][0]
+ label=self.dico_labels[cmd]
+ index = self.MCbox.index(label)
self.MCbox.see(index)
- # On ne selectionne pas le groupe
- #self.arg_selected = grp
- self.dico_labels[grp].focus_set()
+ self.selectitem(cmd,label,self.selection[2])
# 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])
+ label=self.dico_labels[cmd]
+ index = self.MCbox.index(label)
self.MCbox.see(index)
- self.arg_selected = cmd
- self.dico_labels[self.arg_selected].focus_set()
+ self.selectitem(cmd,label,self.selection[2])
# On a trouve une commande on arrete la recherche
return