Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de command Button

Sujet résolu
    21 mai 2011 à 20:18:18

    Bonjour, je poste ici parce-que un problème commence à me prendre pas mal la tête...
    Alors voila, j'ai fait un script avec python afin de calculer un score sur une cible selon des valeurs renvoyé par des capteurs de forces et j'ai décidé de faire un petit interface graphique avec Tkinter oû l'on rentrerait les 4 valeurs et que le score se calcule lorsqu'on appui sur un bouton.
    J'en suis donc arrivé ici :

    from Tkinter import *
    from math import *
     
    def evaluer(event):
        b1,b2,b3,b4=bal1.get(),bal2.get(),bal3.get(),bal4.get()
        b=[float(b1),float(b2),float(b3),float(b3)]                  ## Les valeurs renvoie par les balances/capteurs
        b.sort()                           ## Tri la liste par ordre croissant
        b.reverse()                        ## Inverse la liste (ordre decroissant)
     
        cotecible=70.                      ## Reglage des dimensions de la cible
        demidiag=sqrt(cotecible**2/2)      ## Calcul de la longueur de la demi-diagonale de la cible 
     
     
        d1=(demidiag/10)*((120-b[0])/8)    ##Distance de l'impact de la balance renvoyant la plus  grande valeur
        d2=(demidiag/10)*((120-b[1])/8)    ##Distance de l'impact de la balance renvoyant la deuxieme plus grande valeur
        cosalpha=-((d1**2-d2**2-cotecible**2)/(2*d2*cotecible))  ##Cosinus de l'angle inconu
     
     
     
        alpha=degrees(acos(cosalpha))                            ##Valeur de l'angle inconu
      
        distancecentre = sqrt((2*(cotecible/2)**2)+d2**2-2*sqrt(2*(cotecible/2)**2)*d2*cos(radians(45-alpha)))
     
        ##Calcule de la distance entre le centre de la cible et le point d'impact
     
        score = int(((demidiag-distancecentre)/(demidiag/10))+1)
        tex2.configure(text=score)
     
    fen1=Tk()
     
    tex1=Label(fen1, text="Calcul du score effectue lors d'un tir ", fg='red')
    tex1.pack()
     
    bal1= Entry(fen1).pack()
     
    bal2= Entry(fen1).pack()
     
    bal3 = Entry(fen1).pack()
     
    bal4 = Entry(fen1).pack()
     
     
    tex2=Label(fen1).pack()
     
    calculscore=Button(fen1, text="Calculer", command=evaluer).pack()
     
     
     
     
    fen1.mainloop()
    


    Le problème est que quand je click sur le bouton Calculer, le terminal m'affiche un message d'erreur :


    Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
    TypeError: evaluer() takes exactly 1 argument (0 given)

    Voilà, en espérant que quelqu'un puisse m'aider.
    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      21 mai 2011 à 20:23:22

      Vire le event.
      • Partager sur Facebook
      • Partager sur Twitter
        21 mai 2011 à 20:37:24

        Lorsque je vire le event, une autre erreur apparait dans la console :

        Traceback (most recent call last):
        File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
        return self.func(*args)
        File "scorecible.py", line 5, in evaluer
        b1,b2,b3,b4=bal1.get(),bal2.get(),bal3.get(),bal4.get()
        AttributeError: 'NoneType' object has no attribute 'get'

        Pourquoi le event pose problème? Je ne comprend pas...
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          21 mai 2011 à 20:44:22

          Tu viens de résoudre ta première erreur, maintenant tu en as une autre.

          Je peux pas tester, mais t'es sûr d'avoir mis des valeurs dans tes entry?

          • Partager sur Facebook
          • Partager sur Twitter
            21 mai 2011 à 20:49:33

            Heu oui, je crois.
            Je lance l'application, je click dans la première case, je rentre 40, la deuxième 40 et pareil sur les deux autres, puis je click sur calculer et ça me met alors cette erreur
            • Partager sur Facebook
            • Partager sur Twitter
              21 mai 2011 à 20:54:07

              à la place de
              bal1= Entry(fen1).pack()
              

              mets
              bal1= Entry(fen1)
              bal1.pack()
              


              pareil pour la suite
              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

                21 mai 2011 à 21:00:55

                Merci josmilley, erreur résolu!
                Il resté une petite erreur après :
                la même que précédemment mais avec configure à la place, j'ai donc du faire pareil pour le tex2 que pour les bal.

                L'application marche enfin, merci a vous deux.
                • Partager sur Facebook
                • Partager sur Twitter

                Problème de command Button

                × 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