Partage
  • Partager sur Facebook
  • Partager sur Twitter

tkinter appel fenetre secondaire

    27 novembre 2019 à 15:23:20

    Bonjour, je reitére ma demande en essayant de respecter les règles du forum (et y être parvenu)

    je me forme à Python (3.8) et tkinter; et j'ai un souci:

    quand j'appelle une fenêtre secondaire depuis une fenêtre principale, la Stringvar initialisée dans la fenêtre secondaire par montant.set('0.00') et utilisée dans cette même fenêtre dans un Entry(x,textvariable=montant), ne s'affiche que si la fenêtre principale est "destroy".

    Pourquoi?

    Je remercie les bonnes âmes qui pourront m'expliquer cela!

    voici mes scripts, soyez indulgents je débute....

    # script de la procédure appelante
    
    from tkinter import *
    from Class_essai import *
    
    f_princ=Tk()
    f_princ.title("fenetre appellante")
    f_princ.geometry("300x100+100+10")
    #f_princ.destroy() le script fenetre appelée ne fonctionne pas si cette ligne est en commentaire
    f1=essai()
    
    
    
    
    # script de la fenetre appelée
    
    from tkinter import *
    
    class essai(Toplevel):
    
    #------------montant-----------------------------------
    
        def proc_montant_saisi_focus_in(self,event):
            self.montant_saisi.select_range(0,END) #on selectionne tout ce qui peut exister dans le champ
    
        def proc_montant_saisi_keypress_return(self,event):
            self.montant.set(self.montant_saisi.get())
            self.afficher_verif()
    
    #-----------------------------------------------
    
           
        def afficher_verif(self):
            self.ecriture_generee.set( self.montant.get()  + ",0,"  )
            self.verif.config(text=self.ecriture_generee.get())
    
            self.f_validation.config(bg='lime')
            self.label_validation.config(text="zone de validation")
    
        def effacer_flux(self):
            print('procedure effacer_flux')
            self.montant.set("0.00")
            self.afficher_verif()
            self.f_validation.config(bg='lime')
            self.label_validation.config(text="zone de validation")
            #on réafficher l'item 2001 Banque si nécessaire
            self.essai_quelle_action.selection_set(1)
            self.essai_quelle_action.focus_set()
    
    #------------valider flux-----------------------------------
        def valider_flux(self):
            etat=True
    
    
    #------------les actions-----------------------------------
        def j_encaisse(self):
            self.afficher_verif()
            self.montant_saisi.focus_set()
    
    #------------quelle_action-----------------------------------
        def proc_quelle_action_down(self,event):
            global saisie_action_sel
            try:
                self.essai_action_sel=self.essai_quelle_action.curselection()[0]
            except:
                self.essai_quelle_action.selection_set(1)
              
            self.essai_quelle_action.selection_clear(0,7)
           
            if self.essai_action_sel<self.essai_quelle_action.size()-1:
                self.essai_action_sel+=1
    
            self.essai_quelle_action.selection_set(self.essai_action_sel)
               
        def proc_quelle_action_up(self,event):
            global saisie_action_sel
            try:
                self.essai_action_sel=self.essai_quelle_action.curselection()[0]
            except:
                self.essai_quelle_action.selection_set(1)
              
            self.essai_quelle_action.selection_clear(0,7)
               
            if self.essai_action_sel>0:
                self.essai_action_sel-=1
    
            self.essai_quelle_action.selection_set(self.essai_action_sel)
    
        def proc_quelle_action(self,event):
            global saisie_action_sel
            self.essai_action_sel=self.essai_quelle_action.curselection()[0]
            print("action selectionnée: "+ str(self.essai_action_sel)+" " +self.essai_quelle_action.get(self.essai_action_sel))
            self.essai_quelle_action.selection_clear(0,7) #effacement de la selection
            if self.essai_action_sel==0:
                try:
                    self.f_essai.destroy()
                    print('Fermeture de f_saisie')
                except:
                    print('Echec tentative fermeture de la fenetre f_saisie')
            else:
                if self.essai_action_sel==2:
                    self.j_encaisse()
                else:
                    print("dans le vide")
                    self.essai_quelle_action.selection_set(1)
                   
    #-------------construction du formulaire de saisie------------------   
        def __init__ (self):
    
            self.f_essai =Tk()
            self.f_essai.title("fenetre appellée")
            self.f_essai.geometry("700x250+700+10")
           
            self.essai_action_sel=Variable()
           
            self.montant=StringVar()
            self.ecriture_generee=StringVar()
            self.ecriture_generee.set("."*50)
           
           
        #mise en place de la frame f_validation
            self.f_validation = Frame(self.f_essai, bg="lime") #"yellow"
            self.f_validation.pack(side=BOTTOM,fill=X)
            self.label_validation=Label(self.f_validation,text="zone de validation", bg="yellow",font=",1")
            self.label_validation.pack(side=TOP)
            self.verif=Label(self.f_validation,text=self.ecriture_generee.get(),font=",1")
            self.verif.pack(side=LEFT,padx=30)
            """
        #mise en place des bouton "valider" et "annuler" dans la frame f_validation
            self.b_annuler=Button(self.f_validation,text="Annuler",command=self.effacer_flux)
            self.b_annuler.pack(side=RIGHT,padx=5)
            self.b_valider=Button(self.f_validation,text="Valider",command=self.valider_flux)
            self.b_valider.pack(side=RIGHT,padx=15)
            """       
        #mise en place des frame2 et frame3
            self.frame2 = Frame(self.f_essai, width=300, height=400)
            self.frame2.pack(side=LEFT,fill=BOTH,expand=1)
            self.frame3 = Frame(self.f_essai, width=300, height=400)
            self.frame3.pack(side=RIGHT,fill=BOTH,expand=1)
    
        #mise en place de la Listbox 'quelle_action' dans frame2
            Label(self.frame2, text="Action",bg="light blue", bd=1,width=30, relief=SUNKEN).pack(side=TOP, pady=2)
            self.essai_quelle_action=Listbox(self.frame2,selectmode=SINGLE, bg='light blue',width=35,height=9)
            self.essai_quelle_action.pack(side=TOP,pady=2 )
           
            self.essai_quelle_action.insert(END,"Quitter")
            self.essai_quelle_action.insert(END,"-------")
            self.essai_quelle_action.insert(END,"Je recois de l'argent")
    
    
        #mise en place des zones de saisie 'montant_saisi' et 'libelle_saisi' dans frame3
            Label(self.frame3, text= "Montant et libellé du flux", bd=1,width=30, relief=SUNKEN).pack(side=TOP)
            self.frame3_1=Frame(self.frame3)
            self.frame3_1.pack(side=TOP)
            Label(self.frame3_1,text="Montant:").grid(row=2,column=0,sticky='e')
            self.montant_saisi=Entry(self.frame3_1,textvariable=self.montant)
            self.montant_saisi.grid(row=2,column=1)
    
           
            #definition des actions
            self.essai_quelle_action.bind("<Up>", self.proc_quelle_action_up)
            self.essai_quelle_action.bind("<Down>", self.proc_quelle_action_down)
            self.essai_quelle_action.bind("<ButtonRelease>", self.proc_quelle_action)
            self.essai_quelle_action.bind("<KeyPress-Return>", self.proc_quelle_action)
    
            self.montant_saisi.bind("<FocusIn>", self.proc_montant_saisi_focus_in)
            self.montant_saisi.bind("<KeyPress-Return>", self.proc_montant_saisi_keypress_return)
    
    
            self.effacer_flux()
            self.essai_quelle_action.selection_set(1)
            self.essai_quelle_action.focus_force()
            self.essai_quelle_action.mainloop()
    



    -
    Edité par ClaudeCerf 28 novembre 2019 à 10:39:45

    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2019 à 17:54:05

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter

      tkinter appel fenetre secondaire

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown