From ada53ca42b6a238920500adc8ae4b770d4fdd77e Mon Sep 17 00:00:00 2001 From: Christian Caremoli <> Date: Wed, 4 Nov 2009 17:27:33 +0000 Subject: [PATCH] CCAR: correction de problemes avec les parametres 1- un parametre detruit continue a etre utilise par les commandes suivantes (corrige) 2- un parametre qui change de valeur ne modifie pas le statut si necessaire (corrige) plus un probleme avec la commande DETRUIRE et la destruction de concept : une recursion malencontreuse dans fin_modif produisait un comportement incomprehensible (corrige) Remplacement de quelques appels a place() par des appels a grid() pour un meilleur placement. --- Extensions/parametre.py | 2 + Ihm/I_ETAPE.py | 16 ++---- Ihm/I_MCCOMPO.py | 1 + Ihm/I_MCLIST.py | 1 + Ihm/I_MCSIMP.py | 9 ++- InterfaceTK/compoparam.py | 25 +++------ InterfaceTK/panels.py | 35 ++++++------ InterfaceTK/plusieursbasepanel.py | 2 +- InterfaceTK/uniquebasepanel.py | 5 -- InterfaceTK/widgets.py | 91 ++++++++++++++++--------------- 10 files changed, 92 insertions(+), 95 deletions(-) diff --git a/Extensions/parametre.py b/Extensions/parametre.py index 58ceefa2..2c3ed698 100644 --- a/Extensions/parametre.py +++ b/Extensions/parametre.py @@ -130,6 +130,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) : Remplace la valeur de self par new_valeur interprétée """ self.valeur = self.interprete_valeur(new_valeur) + self.parent.update_concept_after_etape(self,self) self.init_modif() def set_nom(self,new_nom): @@ -249,6 +250,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) : paramètres du JDC """ self.jdc.delete_param(self) + self.parent.delete_concept(self) def update_context(self,d): """ diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py index a4648fd2..809fa3d5 100644 --- a/Ihm/I_ETAPE.py +++ b/Ihm/I_ETAPE.py @@ -83,17 +83,8 @@ class ETAPE(I_MCCOMPO.MCCOMPO): Méthode appelée une fois qu'une modification a été faite afin de déclencher d'éventuels traitements post-modification ex : INCLUDE et POURSUITE + Ne pas mettre de traitement qui risque d'induire des recursions (soit a peu pres rien) """ - #print "fin_modif",self,self.parent - if self.nom == "DETRUIRE": - #Il n'est pas conseillé de mettre des traitements dans fin_modif. Ceci est une - # exception qu'il faut supprimer à terme. - #une commande DETRUIRE a été modifiée. Il faut verifier les commandes - #suivantes - #ATTENTION: aux eventuelles recursions - self.parent.control_context_apres(self) - pass - CONNECTOR.Emit(self,"valid") if self.parent: self.parent.fin_modif() @@ -424,6 +415,11 @@ class ETAPE(I_MCCOMPO.MCCOMPO): return commande_comment + def modified(self): + """Le contenu de l'etape (mots cles, ...) a ete modifie""" + if self.nom=="DETRUIRE": + self.parent.control_context_apres(self) + #ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau def Build_sd(self,nom): diff --git a/Ihm/I_MCCOMPO.py b/Ihm/I_MCCOMPO.py index 183a104e..f9b03c33 100644 --- a/Ihm/I_MCCOMPO.py +++ b/Ihm/I_MCCOMPO.py @@ -186,6 +186,7 @@ class MCCOMPO(I_OBJECT.OBJECT): objet.delete_mc_global() objet.update_condition_bloc() objet.supprime() + self.etape.modified() self.fin_modif() return 1 diff --git a/Ihm/I_MCLIST.py b/Ihm/I_MCLIST.py index 7f94e66e..4627bf55 100644 --- a/Ihm/I_MCLIST.py +++ b/Ihm/I_MCLIST.py @@ -79,6 +79,7 @@ class MCList: CONNECTOR.Emit(self,"supp",obj) self.update_condition_bloc() obj.supprime() + self.etape.modified() self.fin_modif() return 1 diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index a6794ed8..9abb391f 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -283,6 +283,7 @@ class MCSIMP(I_OBJECT.OBJECT): self.valeur = new_valeur self.val = new_valeur self.update_condition_bloc() + self.etape.modified() self.fin_modif() return 1 @@ -366,9 +367,13 @@ class MCSIMP(I_OBJECT.OBJECT): def update_concept(self,sd): if type(self.valeur) in (types.ListType,types.TupleType) : - if sd in self.valeur:self.fin_modif() + if sd in self.valeur: + self.init_modif() + self.fin_modif() else: - if sd == self.valeur:self.fin_modif() + if sd == self.valeur: + self.init_modif() + self.fin_modif() def delete_concept(self,sd): """ diff --git a/InterfaceTK/compoparam.py b/InterfaceTK/compoparam.py index 80094ad3..984df830 100644 --- a/InterfaceTK/compoparam.py +++ b/InterfaceTK/compoparam.py @@ -71,19 +71,15 @@ class PARAMPanel(panels.OngletPanel): Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE """ self.frame_valeur = Frame(page) - #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') self.frame_valeur.pack(expand=1) # affichage du titre du panneau self.titre = StringVar() self.titre.set("PARAMETRE "+self.node.item.get_nom()) - #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n') Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5) # création des labels et entries associés aux nom et valeur du paramètre - #Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3) - Label(self.frame_valeur,text= 'Nom du paramètre : ').grid(row=1,sticky=W,padx=5,pady=5) + Label(self.frame_valeur,text= 'Nom du paramètre : ',justify=LEFT).grid(row=1,sticky=W,padx=5,pady=5) self.entry_nom = Entry(self.frame_valeur) - #Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5) - Label(self.frame_valeur,text= 'Valeur du paramètre : ').grid(row=2,sticky=W,padx=5,pady=5) + Label(self.frame_valeur,text= 'Valeur du paramètre : ',justify=LEFT).grid(row=2,sticky=W,padx=5,pady=5) self.entry_val = Entry(self.frame_valeur) # binding sur entry_nom self.entry_nom.bind("",lambda e,s=self : s.entry_val.focus()) @@ -91,20 +87,15 @@ class PARAMPanel(panels.OngletPanel): self.entry_nom.bind("",lambda e,s=self : s.entry_val.focus()) self.entry_val.bind("",lambda e,s=self : s.change_valeur()) # affichage des entries - #self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3) self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5) - #self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5) self.entry_val.grid(row=2,column=1,sticky=W,padx=5,pady=5) # affichage d'une phrase d'aide - aide = """ - Un retour de chariot dans une zone de saisie vous permet de vérifier si - la valeur que vous avez entrée est valide. - Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles - valeurs seront effectivement prises en compte - """ - #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n') - Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5) - self.frame_valeur.columnconfigure(1,weight=1) + aide = """Un retour de chariot dans une zone de saisie vous permet +de vérifier si la valeur que vous avez entrée est valide. +Ce n'est qu'après avoir appuyé sur le bouton Valider que les +nouvelles valeurs seront effectivement prises en compte""" + Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5,sticky=W) + #self.frame_valeur.columnconfigure(1,weight=1) # affichage des nom et valeur du paramètre self.display_valeur() self.entry_nom.focus() diff --git a/InterfaceTK/panels.py b/InterfaceTK/panels.py index 8932efd3..b6290ad7 100644 --- a/InterfaceTK/panels.py +++ b/InterfaceTK/panels.py @@ -336,27 +336,28 @@ class OngletPanel(Panel) : """ Crée la page de saisie du nom du concept """ - self.label = Label(page,text='Nom du concept :') - self.label.place(relx=0.1,rely=0.4) + self.label = Label(page,text='Nom du concept :',justify=LEFT) + self.label.grid(row=0,sticky=W,padx=5,pady=10) self._any = Entry(page,relief='sunken') - self._any.place(relx=0.35,rely=0.4,relwidth=0.5) + self._any.grid(row=0,column=1,padx=5,pady=10) self._any.bind("",lambda e,s=self:s.execConcept()) self._any.bind("",lambda e,s=self:s.execConcept()) self._any.insert(0,self.node.item.GetText()) self.but_ok=Button(page,text = "Valider",command=self.execConcept) - self.but_ok.place(relx=0.35,rely=0.8, relwidth=0.35) type_sd = self.node.item.get_type_sd_prod() + row=1 if type_sd : - txt = "L'opérateur courant retourne un objet de type %s" %type_sd + txt = "L'opérateur courant retourne un objet de type:\n%s" %type_sd self.label = Label(page, text = txt) - self.label.place(relx=0.5,rely=0.55,anchor='n') + self.label.grid(row=1,columnspan=2,padx=5,pady=10,sticky=W) + row=2 + self.but_ok.grid(row=row,columnspan=2,padx=5,pady=10) self._any.focus() # aide associée au panneau bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner au concept retounré par l'opérateur courant et pressez pour valider""" page.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) page.bind("",self.parent.appli.efface_aide) - def makeMoclesPage(self,page): """ @@ -482,33 +483,33 @@ class OngletPanel(Panel) : self.frame_comment = Frame(page,bd=1,relief='raised') self.frame_param = Frame(page,bd=1,relief='raised') self.frame_boutons = Frame(page,bd=1,relief='raised') - self.frame_comment.place(relx=0,rely=0,relwidth=1,relheight=0.40) - self.frame_param.place(relx=0,rely=0.40,relwidth=1,relheight=0.40) - self.frame_boutons.place(relx=0,rely=0.84,relwidth=1,relheight=0.16) # remplissage de la frame commentaire - Label(self.frame_comment,text = "Insérer un commentaire :").place(relx=0.1,rely=0.5,anchor='w') + Label(self.frame_comment,text = "Insérer un commentaire :",justify=LEFT).grid(row=0,rowspan=2,sticky=W,padx=5, pady=5) but_comment_avant = Button(self.frame_comment, text = "AVANT "+self.node.item.get_nom(), command = lambda s=self :s.ajout_commentaire(ind = 'before')) but_comment_apres = Button(self.frame_comment, text = "APRES "+self.node.item.get_nom(), command = self.ajout_commentaire) - but_comment_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45) - but_comment_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45) + but_comment_avant.grid(row=0,column=1,padx=5, pady=5) + but_comment_apres.grid(row=1,column=1,padx=5, pady=5) + self.frame_comment.pack(side='top',fill='both',padx=5, pady=5) # remplissage de la frame paramètre - Label(self.frame_param,text = "Insérer un paramètre :").place(relx=0.1,rely=0.5,anchor='w') + Label(self.frame_param,text = "Insérer un paramètre :",justify=LEFT).grid(row=0,rowspan=2,sticky=W,padx=5, pady=5) but_param_avant = Button(self.frame_param, text = "AVANT "+self.node.item.get_nom(), command = lambda s=self :s.ajout_parametre(ind = 'before')) but_param_apres = Button(self.frame_param, text = "APRES "+self.node.item.get_nom(), command = self.ajout_parametre) - but_param_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45) - but_param_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45) + but_param_avant.grid(row=0,column=1,padx=5, pady=5) + but_param_apres.grid(row=1,column=1,padx=5, pady=5) + self.frame_param.pack(side='top',fill='both',padx=5, pady=5) # remplissage de la frame boutons Button(self.frame_boutons, text="Commentariser toute la commande", - command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center') + command = self.comment_commande).pack(side='top',padx=5, pady=5) + self.frame_boutons.pack(side='top',fill='both',padx=5, pady=5) def deselectMC(self,name): self.parent.appli.affiche_infos('') diff --git a/InterfaceTK/plusieursbasepanel.py b/InterfaceTK/plusieursbasepanel.py index bf395493..79840ce5 100644 --- a/InterfaceTK/plusieursbasepanel.py +++ b/InterfaceTK/plusieursbasepanel.py @@ -105,7 +105,7 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base) self.label.place(relx=0.05,rely=0.2) - # Création d'un bouton "Importer ..." et d'un bouton "Paramatres" sur le panel. + # Création d'un bouton "Importer ..." et d'un bouton "Parametres" sur le panel. bouton_valeurs_fichier = Button(self.frame_choix, text="Importer", command=self.select_in_file) diff --git a/InterfaceTK/uniquebasepanel.py b/InterfaceTK/uniquebasepanel.py index 847ae02a..3b083d14 100644 --- a/InterfaceTK/uniquebasepanel.py +++ b/InterfaceTK/uniquebasepanel.py @@ -62,10 +62,8 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel): self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) self.frame_valeur.bind("",self.parent.appli.efface_aide) self.label = Label(self.frame_valeur,text='Valeur :') - #self.label.place(relx=0.1,rely=0.2) self.label.grid(row=0,padx=5,pady=5) self.entry = Entry(self.frame_valeur,relief='sunken') - #self.entry.place(relx=0.28,rely=0.2,relwidth=0.6) self.entry.grid(row=0,column=1,padx=5,pady=5) self.entry.bind("",lambda e,c=self.valid_valeur:c()) self.entry.bind("",lambda e,c=self.valid_valeur:c()) @@ -75,14 +73,11 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel): text = aide, wraplength=int(self.frame_valeur.winfo_width()*0.8), justify='center') - #self.aide.place(relx=0.5,rely=0.9,anchor='n') self.aide.grid(row=4,columnspan=2,padx=5,pady=5) # bouton parametre bouton_parametres = Button(self.frame_valeur, text="Parametres", command=self.affiche_parametre) - #bouton_parametres.place(relx=0.28,rely=0.5,relwidth=0.4) bouton_parametres.grid(row=2,columnspan=2,padx=5,pady=5) bouton_val = Button(self.frame_valeur, text="Valider", command=self.valide) - #bouton_val.place(relx=0.28,rely=0.6,relwidth=0.4) bouton_val.grid(row=3,columnspan=2,padx=5,pady=5) # affichage de la valeur du MCS self.display_valeur() diff --git a/InterfaceTK/widgets.py b/InterfaceTK/widgets.py index 13a6f92e..a3317959 100644 --- a/InterfaceTK/widgets.py +++ b/InterfaceTK/widgets.py @@ -69,8 +69,6 @@ class Fenetre : # définition des frames self.frame_texte = Frame(self.fenetre) self.frame_boutons = Frame(self.fenetre) - #self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9) - #self.frame_boutons.place(relheight=0.1,relx=0,rely=0.9,relwidth=1.) # définition de la zone texte et du scrollbar self.zone_texte = Text(self.frame_texte,font=fonte,wrap=wrap, height=height,width=width) @@ -88,12 +86,10 @@ class Fenetre : 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') self.but_quit.pack(side='left',padx=25, pady=5) self.but_save.pack(side='right',padx=25, pady=5) - self.frame_texte.pack(side='top',fill='both',expand=1) - self.frame_boutons.pack(side='bottom') + self.frame_boutons.pack(side='bottom',padx=5,pady=5) + self.frame_texte.pack(side='top',fill='both',expand=1,padx=5,pady=5) self.zone_texte.focus_set() self.fenetre.bind('',self.quit) #dismiss window @@ -134,12 +130,10 @@ class Fenetre : """ Affiche le texte dans la fenêtre """ if texte != "" : self.zone_texte.insert(END,texte) - try: - self.fenetre.update_idletasks() - x0,y0,x1,y1 = self.zone_texte.bbox(END) - if (y1-y0) < 300 : self.efface_scroll() - except: - pass + self.fenetre.update_idletasks() + curline = int(self.zone_texte.index("insert").split('.')[0]) + if curline < int(self.zone_texte["height"]): + self.efface_scroll() def save(self): """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom @@ -187,7 +181,6 @@ 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') @@ -196,8 +189,6 @@ class FenetreYesNo(Fenetre): # 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("", self.page_up) @@ -213,10 +204,12 @@ class FenetreYesNo(Fenetre): # 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') + self.but_yes.pack(side="left",padx=5,pady=5) + self.but_no.pack(side="left",padx=5,pady=5) + self.frame_boutons.pack(side="top",padx=5,pady=5) # affichage du texte self.affiche_texte(self.texte) + self.frame_texte.pack(side="top",fill='both',padx=5,pady=5,expand=1) centerwindow(self.fenetre) def yes(self): @@ -232,15 +225,10 @@ class FenetreDeSelection(Fenetre): Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé. """ def __init__(self,panel,item,appli,titre="",texte="",cardinal=1): - Fenetre.__init__(self,appli,titre=titre,texte=texte) - self.frame_boutons.place_forget() - self.frame_texte.place_forget() - self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.8) - self.frame_boutons.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.) + Fenetre.__init__(self,appli,titre=titre,texte=texte,width=20,height=15) self.cardinal=cardinal - self.fenetre.configure(width = 320,height=400) - centerwindow(self.fenetre) + #self.fenetre.configure(width = 320,height=400) self.panel = panel self.item = item self.fenetre.title(titre) @@ -256,16 +244,17 @@ class FenetreDeSelection(Fenetre): selectioncommand = self.choose_separateur, scrolledlist_items = l_separateurs_autorises) self.choix_sep.component('entry').configure(width=6) - self.choix_sep.place(relx=0.01,rely=0.5,anchor='w') - self.choix_sep.selectitem(self.separateur) + self.choix_sep.grid(row=0,rowspan=2,padx=5,pady=5) + #self.choix_sep.selectitem(self.separateur) # Replacement - self.but_quit.place_forget() - self.but_save.place_forget() + self.but_quit.pack_forget() + self.but_save.pack_forget() self.but_all = Button(self.frame_boutons,text = "Tout Sélectionner", command=self.tout) - self.but_save.place(relx=0.6,rely=0.6,anchor='center') - self.but_quit.place(relx=0.8,rely=0.6,anchor='center') - self.but_all.place(relx=0.7,rely=0.2,anchor='center') + self.but_save.grid(row=1,column=1,padx=5,pady=5) + self.but_quit.grid(row=1,column=2,padx=5,pady=5) + self.but_all.grid(row=0,column=1,columnspan=2,padx=5,pady=5) self.choose_separateur('espace') + centerwindow(self.fenetre) def get_separateurs_autorises(self): @@ -451,7 +440,7 @@ class FenetreDeParametre(Fenetre) : self.parent=parent self.appli=appli self.fenetre = Toplevel() - self.fenetre.configure(width = 250,height=100) + #self.fenetre.configure(width = 250,height=100) self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) self.fenetre.title("Parametres") self.titre = "Parametres" @@ -460,9 +449,8 @@ class FenetreDeParametre(Fenetre) : # définition des frames self.frame_texte = Frame(self.fenetre) - self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.7) # définition de la zone texte et du scrollbar - self.zone_texte = Text(self.frame_texte,font=fonte) + self.zone_texte = Text(self.frame_texte,font=fonte,width=40) self.zone_texte.bind("", self.page_up) self.zone_texte.bind("", self.page_down) self.zone_texte.bind("", self.unit_up) @@ -477,15 +465,14 @@ class FenetreDeParametre(Fenetre) : # définition des boutons self.frame_boutons = Frame(self.fenetre) - self.frame_boutons.place(relheight=0.3,relx=0,rely=0.65,relwidth=1.) - self.label1 = Label(self.frame_boutons,text="surligner la") - self.label2 = Label(self.frame_boutons,text="ligne entière") - self.label1.place(relx=0.1,rely=0) - self.label2.place(relx=0.1,rely=0.5) + self.label1 = Label(self.frame_boutons,text="surligner la\nligne entière",justify=LEFT) self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit) self.but_save = Button(self.frame_boutons,text = "Choisir",command = self.Choisir) - self.but_save.place(relx=0.6,rely=0,relheight=1) - self.but_quit.place(relx=0.8,rely=0,relheight=1) + self.but_quit.pack(side='right',padx=5, pady=5) + self.but_save.pack(side='right',padx=5, pady=5) + self.label1.pack(side='right',padx=5, pady=5) + self.frame_boutons.pack(side='bottom') + self.frame_texte.pack(side='top',expand=1,fill='both') def Choisir(self): @@ -497,13 +484,23 @@ class FenetreDeParametre(Fenetre) : l_param = "" for param in selection.splitlines(): nomparam=param[0:param.find("=")-1] - if nomparam != '' : + if nomparam != '' : l_param=l_param+nomparam+',' self.parent.entry.delete(0,Tkinter.END) self.parent.entry.insert(0,l_param[0:-1]) self.parent.valid_valeur() self.quit() + def affiche_texte(self,texte): + """ Affiche le texte dans la fenêtre """ + if texte != "" : + self.zone_texte.insert(END,texte) + self.fenetre.update_idletasks() + curline = int(self.zone_texte.index("insert").split('.')[0]) + if curline < int(self.zone_texte["height"]): + self.zone_texte["height"]=curline + self.efface_scroll() + class Formulaire: """ Cette classe permet de créer une boîte Dialog dans laquelle @@ -1228,7 +1225,7 @@ class ListeChoixParGroupes(ListeChoix) : def affiche_liste(self): """ Affiche la liste dans la fenêtre""" liste_labels=[] - self.dico_mots={} + self.dico_mots={} self.MCbox.config(state=NORMAL) self.MCbox.delete(1.0,END) for grp in self.liste_groupes: @@ -1385,3 +1382,11 @@ class ListeChoixParGroupes(ListeChoix) : # On a trouve une commande on arrete la recherche return +if __name__ == "__main__": + root=Tkinter.Tk() + f=FenetreDeParametre(root,None,None,"\n".join(["coucouxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=2"]*15)) + #f=FenetreYesNo(None,titre="Le titre",texte="\n".join(["Le textexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]*35),yes="Yes",no="No") + + + root.mainloop() + -- 2.39.2