IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème avec poo développement et tkinter


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème avec poo développement et tkinter
    Bonjour Madame, Monsieur,

    Je me permets de poster ce message pour solliciter votre aide. Je suis nouveau en python. Pour un projet, je dois utiliser thinker, développement poo (class). Je veux créer une calculatrice graphique afin modifier le code pour mon projet. Je me suis inspiré des tutoriels. Donc il y a fort de chance que vous trouviez des ressemblances. Dans mon cas je souhaite récupérer la valeur émis quand on clique sur le bouton pour pouvoir effectuer des calcules. Dans cet exemple, j'ai juste utilisé pour le bouton7 (btn7) . Lorsque je fais appel à la fonction application1 , il m'indique des erreurs, si vous pouvez éclairé. Je serai reconnaissant. Merci.

    cordialement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    from math import *
    from tkinter import *
    import sys 
     
    class Calcule(object):
        """calcule de valeur """
        def __init__(self):
            self.root = Tk()
            self.root.title("Calcualtrice")
            self.string1 = StringVar()
            self.container = Frame(self.root)
     
     
     
            string2 =  Entry(self.root,font = ('arial', 20,'bold'),textvariable = self.string1,bd = 30, insertwidth = 4, bg = "powder blue", justify = "right").grid(columnspan = 4)
     
     
     
            btn7 = Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20, 'bold'), text = "7", command = lambda:application1("7")).grid(row =1, column  = 0)
     
            btn8 = Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20, 'bold'), text ="8").grid(row = 1, column = 1)
     
            btn9 = Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20,'bold'), text = "9").grid(row =1, column  =  2)
     
            btn_divi = Button(self.root, padx = 16, bd = 8, fg = "black", font =('arial', 20, 'bold'), text ="/").grid(row = 1, column =  3)
     
            btn4 = Button(self.root, padx = 16, bd = 8, fg ='black', font =('arial', 20, 'bold'), text = "4").grid(row = 2, column = 0)
            btn5 = Button(self.root, padx = 16, bd = 8, fg ="black", font = ('arial',20, 'bold'), text = "5").grid(row = 2, column = 1)
            btn6 =  Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20, 'bold'), text = "6").grid(row = 2, column = 2)
            btn3 = Button(self.root, padx = 16, bd = 8, fg = "black", font =  ('arial', 20, 'bold'), text = "*").grid(row = 2, column = 3)
            btn0 =  Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20, 'bold'), text = "0").grid(row = 3, column = 0)
            btn1 = Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20, 'bold'), text = '1').grid(row = 3, column = 1)
            btn2 = Button(self.root, padx= 16, bd = 8, fg = "black", font =  ('arial', 20, 'bold'),text  = '2').grid(row = 3, column = 2)
            btn3  =  Button(self.root, padx= 16, bd = 8, fg = "black", font =  ('arial', 20, 'bold'), text = '3').grid(row =  3, column  = 3)
     
            self.root.mainloop()
     
     
     
            def application1(self, nombre):
                 self. valeur1 = valeur1+ str(nombre)
     
     
            def update(self,methode):
                if methode == "add":
                    print("bonjour")
                else :
                    print("non")

    terminal :


    python3 calculatrice2.py
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
    return self.func(*args)
    File "calculatrice2.py", line 25, in <lambda>
    btn7 = Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20, 'bold'), text = "7", command = lambda:application1("7")).grid(row =1, column = 0)
    NameError: free variable 'application1' referenced before assignment in enclosing scope

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Si application1 est méthode de la classe, l'appeler s'écrira self.application1... car les variables sans "." à l'intérieur sont recherchées comme variables locales ou globales.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Il y a plein de problèmes dans le script. C'est un travail en cours de développer, ok, on peut ignorer des choses pour ne focaliser que sur la question posée viz faire matcher le bouton '7'.

    [1] Il faut déclarer la variable valeur1 d'instance de la classe Calcule. Dans __init__() ajouter cette ligne dans le groupe de declarations des variables d'instance.
    Code python3 : Sélectionner tout - Visualiser dans une fenêtre à part
    self.valeur1=''

    [2] Dans le bouton '7', le lambda, il faut ajouter la réference self pour application1.
    Code python3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #btn7 = Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20, 'bold'), text = "7", command = lambda:application1("7")).grid(row =1, column  = 0)
    btn7 = Button(self.root, padx = 16, bd = 8, fg = "black", font = ('arial', 20, 'bold'), text = "7", command = lambda:self.application1("7")).grid(row =1, column  = 0)

    [3] Il y a d'erreur d'indentation pour les méthode application1 et update. Il faut remonter leur indentation par un niveau vers le haut.

    [4] Dans la méthode application1, il ne faut pas manquer la réference self dans la côté droite, c'est évident. Et puis, pour que la valeur soit montrer dans le wizard Entry, on doit ajouter une ligne pour mettre à jour self.string1, comme ça.
    Code python3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def application1(self, nombre):
        self.valeur1 = self.valeur1+ str(nombre)
        self.string1.set(self.valeur1)

    Voilà !

Discussions similaires

  1. Problème avec mon interface graphique Tkinter
    Par SamirIV dans le forum Tkinter
    Réponses: 0
    Dernier message: 09/05/2014, 21h08
  2. Problème avec Poo
    Par D3bian dans le forum Général Python
    Réponses: 11
    Dernier message: 24/10/2009, 17h55
  3. Problème avec DLL (développée en C++)
    Par MarsOran dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 14/06/2009, 20h04
  4. problème avec méthode 'constructeur' sur tkinter()
    Par velight dans le forum Tkinter
    Réponses: 8
    Dernier message: 23/02/2009, 11h35
  5. [POO] Problème avec l'utilisation de classes.
    Par sekiryou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo