Partage
  • Partager sur Facebook
  • Partager sur Twitter

local variable '' referenced before assignm TK

Probleme de variable avec Tkinter

Sujet résolu
    19 novembre 2019 à 19:03:53

    Bonjour !

    je suis nouvelle dans le langage python et tkinter, et j'ai un problème avec mon programme, qui me permet de calculer l'impots total au fur et a mesure que l'on ajoute d’autres impôts. j'utilise les paramètres du sexe, de l'age, et du revenu.

    j'ai deja créer un programme pour le faire et je voulais essayer de créer avec Tkinter. Mais je rencontre deja un probleme... avant de faire tout mon code j'essaye simplement avec un homme, de plus de 20 ans et un revenu de 100.

    la fonction s'active par un bouton, mais dès que je le lance, on me dit que la variable "impotot", qui me calcule l'impot total au fur et a mesure des saisis n’existe pas, alors que ça fonctionne très bien dans mon premier programme, sans Tkinter... 

    j'ai deja essayé beaucoup de choses différents et passé beaucoup de temps.. mais la je seche.. alors si vous pouvez m'aider ca serait avec plaisir !!

    #############
    #Animation Impot
    #############
    
    from tkinter import *
    window = Tk()
    
    fin = 0
    impotot= 0
    while fin == 0:
        #Calculer et continuer
        def calcul_contiue ():
            if var_gender.get() == 1:
                if var_age.get() > 20:
                    impot = var_revenu.get()*0.17
                    impotot += impot
                    print(impotot)
                return impotot
    
    
        #Création fenetre + frame
        window.title('Impots')
        frame1= Frame (window)
        frame2= Frame (window)
    
        #fin de boucle + debut impot
    
        # bouton calculer et continuer
        button_continuer = Button (window, text= 'Calculer et continuer', command= calcul_contiue)
    
        # bouton calculer et arreter
        button_arreter = Button (window, text= 'Arret', command= window.destroy)
    
        #Entré du sexe
    
        var_gender = IntVar()
        radio_H = Radiobutton(frame1, text= "Homme", value= 1, variable= var_gender)
        radio_F = Radiobutton(frame1, text= "Femme", value= 0, variable= var_gender)
    
        #Entré de l'age
    
        var_age = IntVar()
        age = Entry(frame2, textvariable = var_age)
        label_age= Label(frame2, text= 'age')
    
        #Entré du revenu
    
        var_revenu = DoubleVar()
        revenu = Entry (frame2, textvariable = var_revenu)
        label_revenu = Label(frame2, text= 'revenu')
    
    
    
        frame1.pack(side = LEFT)
        frame2.pack(side= LEFT, padx= 30)
    
        button_continuer.pack()
        button_arreter.pack(pady= 20)
        label_age.pack()
        age.pack()
        label_revenu.pack()
        revenu.pack()
        radio_H.pack()
        radio_F.pack()
        window.mainloop()
    
    



    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2019 à 10:10:30

      Poste le message d'erreur également ça aide à savoir d'où viens le problème.

      Mais la le soucis semble venir de ta fonction calcul_continue, tu print "impotot" alors qu'il n'a été défini nul part, donc tu as un message d'erreur.

      • Partager sur Facebook
      • Partager sur Twitter
        20 novembre 2019 à 13:46:54

        Le message est " local variable 'impotot' referenced before assignm "

        Mais ce que je ne comprend pas c'est que je définie bien impotot=0 avant ma fonction, mais c'est comme si elle n'existait pas, et qu'elle ne se met pas dans *args 

        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2019 à 14:26:13

          Il demande le message d'erreur complet.

          Mais justement la variable est définie en dehors de la fonction, il s'agit d'une variable globale, pas locale.

          • Partager sur Facebook
          • Partager sur Twitter
            20 novembre 2019 à 18:10:50

            Désolé je n'etais pas chez moi, le message d'erreur complet est :

            Traceback (most recent call last):
              File "C:\EduPython\App\lib\tkinter\__init__.py", line 1538, in __call__
                return self.func(*args)
              File "C:\Users\lolog\Documents\Python\Tkinter\controle affichage.py", line 16, in calcul_contiue
                impotot += impot
            UnboundLocalError: local variable 'impotot' referenced before assignment

            ce qui est étrange, c'est que sans Tkinter, la fonction marche tres bien en ayant la variable a l’extérieur de la fonction. 

            Et je ne sais pas me servir d'une variable globale, on m'avait dis qu'on pouvait toujours trouver une autre solution et que la variable globale n’était juste une méthode de simplicité.

            Merci pour vos réponses

            • Partager sur Facebook
            • Partager sur Twitter
              20 novembre 2019 à 23:03:23

              L'utilisation de la déclaration global est nécessaire lorsque l'on souhaite incrémenter ou décrémenter une variable globale :

              cpt=42
              
              def f(x):
                  global cpt
                  cpt = cpt + x
                  print(cpt)
              
              f(10)
              print(cpt)
              
              52
              52
              

              En l'absence du déclarateur global, on aurait une erreur (celle que tu as eue) :

              cpt=42
              
              def f(x):
                  cpt = cpt + x
                  print(cpt)
              
              f(10)
              print(cpt)
              
              UnboundLocalError: local variable 'cpt' referenced before assignment
              

              UnboundLocalError traduit qu'une variable considérée comme locale (d'où le Local) est utilisée alors qu'elle n'a pas été initialisée (d'où le Unbound). Dans le code ci-dessus, l'affectation de cpt (à gauche du signe =) donne à cpt un statut de variable locale ; mais cpt apparaît aussi dans le membre de droite de l'affectation et cpt étant considérée comme locale, cpt ne fait pas référence à la variable définie ligne 1. Ainsi, la variable cpt est utilisée sans avoir été initialisée, d'où l'erreur.

              • Partager sur Facebook
              • Partager sur Twitter
                21 novembre 2019 à 16:35:41

                Merci beaucoup !

                J'ai réussi à finir mon programme :))

                • Partager sur Facebook
                • Partager sur Twitter

                local variable '' referenced before assignm TK

                × 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