Partage
  • Partager sur Facebook
  • Partager sur Twitter

champ calcul

Sujet résolu
    23 janvier 2020 à 2:31:01

    si je créé deux zones de saisies comment mettre dans la 2eme le intvar de la premiere fois 2

    merci a vous

    from tkinter import *
    
    master = Tk ()
    
    
    def var_states():
    
       champstring2.set (int((champstring1.get*2)))
    
    
    var1 = IntVar ()
    var2 = IntVar ()
    Button (master, text="Quit", command=master.quit).grid (row=0, sticky=W)
    
    Button (master, text="Show", command=var_states).grid (row=1, sticky=W)
    
    
    texte1 = StringVar ()
    champstring1 = StringVar ()
    champ = Entry (master, textvariable=champstring1, width=50).grid (row=2, sticky=W)
    texte2 = StringVar ()
    champstring2 = StringVar ()
    champ = Entry (master, textvariable=champstring2, width=50).grid (row=3, sticky=W)
    mainloop ()


    la ligne 4 pose pb

    -
    Edité par JeanMarcCholet 23 janvier 2020 à 4:19:01

    • Partager sur Facebook
    • Partager sur Twitter
      23 janvier 2020 à 7:15:12

      Bonjour ,

      L'erreur vient de la façon dont tu récupère la valeur :

      def var_states():
          champstring2.set(int(champstring1.get()) * 2)


      Maintenant attention, car cela se passe bien uniquement si l'utilisateur saisi des chiffres, pas des caractères !

      A quoi te servent les variables var1 et var2 ?

      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2020 à 8:47:14

        a rien ca vient de  l exo d'avant j'ai oublie de les retirer, je peine a comprendre la différence entre .get et .set

        merci

        -
        Edité par JeanMarcCholet 23 janvier 2020 à 9:01:25

        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2020 à 10:17:15

          JeanMarcCholet a écrit:

          a rien ca vient de  l exo d'avant j'ai oublie de les retirer, je peine a comprendre la différence entre .get et .set

          Une  variable de contrôle v de Tkinter internalise une valeur, par exemple une variable de contrôle IntVar v internalise un entier. La méthode get sert à récupérer la valeur. Par exemple v.get() avec des parenthèses vides peut valoir 42 si v contenait l'entier 42. Et la méthode set à la changer. Par exemple, v.set(2020) va changer la valeur de 42 en 2020. Rien de compliqué.

          Ne pas sur-utiliser les variables de contrôle (ce n'est pas moi qui le dit, c'est le spécialiste n°1 de Tkinter sur StackOverflow). Il y a trois cas d'usage :

          • un widget l'impose, typiquement une entrée ou un bouton radio
          • on veut synchroniser des vues
          • on veut mettre à jour simultanément et automatiquement un grand nombre de widgets.

          Une Entry n'a pas d'option text mais une option textvariable, typiquement à initialiser avec une variable de contrôle Tkinter (cas n°1 ci-dessus). Mais il est facile de ne pas en utiliser car une Entry possède des méthodes facilitant la manipulation du contenu de l'entrée. Sur la base de ton code :

          from tkinter import *
          master = Tk ()
            
          def change():
              val=int(entree1.get())
              entree2.delete(0, END)
              entree2.insert(0,2*val)
           
          Button (master, text="Show", command=change).grid (row=1, sticky=W)
            
          entree1=Entry (master, width=50)
          entree1.grid (row=2, sticky=W)
          entree2=Entry(master,  width=50)
          entree2.grid (row=3, sticky=W)
          mainloop ()



          Au passage évite d'écrire des choses comme

          champ = Entry (master).grid (row=3, sticky=W)



          qui peuvent cacher un bug (champ n'est pas un widget mais None).

          EDIT

          Tu pourras trouver une explication sur les méthodes get et set ici.

          -
          Edité par PascalOrtiz 23 janvier 2020 à 11:10:19

          • Partager sur Facebook
          • Partager sur Twitter

          champ calcul

          × 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