Partage
  • Partager sur Facebook
  • Partager sur Twitter

[python] pourriez-vous m'zxpliquer ?

comprends pas ce code

Sujet résolu
    20 octobre 2006 à 10:31:49

    Bonjour les Zéros,

    Auriez-vous l'amabilité de m'expliquer un truc que je ne comprends pas dans ce code :



    #_*_ coding:Latin-1 _*_

    from Tkinter import *
    from math import *
    # définition de l'action à effectuer si l'utilisateur actionne
    # la touche "enter" alors qu'il édite le champ d'entrée :
    def evaluer(event):
        chaine.configure(text = "Résultat = " + str(eval(entree.get())))
    # ----- Programme principal : -----
    fenetre = Tk()
    entree = Entry(fenetre)
    entree.bind("<Return>", evaluer)
    chaine = Label(fenetre)
    entree.pack()
    chaine.pack()
    fenetre.mainloop()



    1- que veut dire le "event" en parametre à la fonction ?
    Moi c'est dingue je n'arrive jamais à traduire en français un code avec des parenthèses.
    Ici par exemple, je traduis comme suit:
    def (definition) d'une fonction appelée (evaluer) puis... comment puis-je continuer pour signaler "event" toujours dans ma phrase en français ? Et que ca veuille dire quelque chose ?

    2- comment ceci peut-il marcher puisque quand on appelle la fonction evaluer, chaine n'a pas encore été déclaré. En effet, on a d'abord ceci :
    entree.bind("<Return>", evaluer)

    Citation : moi


    ça, ça veut dire, dans mon jarguon :
    la zone de texte appelée entree est liée à l'appui de la touche "ENTER3 en exécutant la fonction "evaluer"


    et seulement apres, ceci :
    chaine = Label(fenetre)

    Or, chaine est utilisé dans la fonction (chaine.configure) donc, je ne comprends pas comment évaluer peut fonctionner sans connaitre chaine ?

    J'espere que vous m'avez comprise .
    Merci et bisous
    • Partager sur Facebook
    • Partager sur Twitter
      20 octobre 2006 à 11:12:03

      J'ai une erreur avec ton code, je suis obligé de changer la ligne de l'évènement pour que cà marche: chaine.configure(text = "Résultat = " + entree.get()). Mais bon j'ai la flemme de chercher pourquoi j'ai une erreur et apparemment pas toi :)

      1: c'est un évènement, quelque chose qui arrive dans ton champ entrée et où il te faudra gérer ce qui arrive quand cet évènement se produit. Tu pourrai traduire cà par "quand il arrive l'évènement d'un appui sur la touche return dans le champ entrée on éxécute la fonction évaluer". De plus selon le cas event contient tout les paramètres qui te permettront de gérer le résultat de cet évènement, par exemple dans le cas d'un clic souris cà contient les coordonnées de la souris au moment de l'évènement que tu peut récupérer dans la fonction en utilisant event.x et event.y.

      2: parce que la fonction evaluer n'est pas effectuée au lancement du programme: elle est liée à un évènement, il faut attendre que celui se produise pour effectuer la fonction, donc chaine = Label(fenetre) est effectué avant ton chaine.configure.

      Sinon à l'instar de l'anglais je ne sais pas si c'est une bonne méthode de traduire tout en français, il vaut mieux penser direct dans le language utilisé, mais ceci est un avis perso.
      • Partager sur Facebook
      • Partager sur Twitter
        20 octobre 2006 à 12:21:22

        1/ «on definit une nouvelle fonction evaluer() qui prends pour argument un evenement.»

        2/ entree.bind("<Return>", evaluer) definit une relation entre l'evenement <Return> et la fonction evaluer() : tant que l'utilisateur n'active pas cette relation (presse enter..), la fonction évaluer() n'est pas calculée :) . (et comme il n'a pas acces à la fenetre avant fenetre.mainloop(), chaine a été définie entre temps)

        Xaar > nanan, c'est de la théorie basique, il est essentiel de l'exprimer en francais.
        • Partager sur Facebook
        • Partager sur Twitter
          20 octobre 2006 à 12:37:43

          Merci,

          donc à chaque fois que je crée une fonction qui attend un "return" ou un clic, je dois mettre "event" en argument ?

          Et ceci:
          str(eval(entree.get())))

          Faut-il que tout soit toujours converti en "str" ? Ou est-ce nécessaire uniquement parce que la zone de texte est^par définition du "str" ?

          Merci et bisous
          • Partager sur Facebook
          • Partager sur Twitter
            20 octobre 2006 à 12:56:06

            1/ oui, pour autant que je sache.

            2/ en l'occurence, tu cherches à concatener deux valeurs.. donc c'est plus propre de s'assurer qu'elles sont compatibles (et par extension, pour satisfaire les besoins de Label).
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              22 octobre 2006 à 14:44:12

              Pour ton code, il est en désordre, il faut déclarer les vars en globales pour que ça marche. Event est l'évéènement courant (globale). Un évènement c'est par exemple un clic, la pression d'une touche, etc.
              • Partager sur Facebook
              • Partager sur Twitter

              [python] pourriez-vous m'zxpliquer ?

              × 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