Partage
  • Partager sur Facebook
  • Partager sur Twitter

TKinter, Entry, get()

Gros doute sur le fonctionnement

Sujet résolu
    18 septembre 2017 à 17:00:38

    Bonjour,

    Je suis le cours de Python sur le site, je suis enfin arrivé aux interfaces graphiques. Le chapitre ne me pose pas de problèmes particuliers jusqu'à arriver à la méthode Entry()

    Le problème n'est pas dans le code à proprement parler, il fonctionne, la fenêtre s'ouvre, la zone à écrire est bien là, j'arrive bien à rentrer du texte, mais quand je presse la touche "entrée" de mon clavier (en faite les deux incluant celle du pavé numérique) il ne se passe absolument rien.

    Je ne vois vraiment pas ce qui m'échappe, car la partie après, utilisant le get() est encore plus "mystérieuse" pour moi, car je ne sais même pas s'il faut l'insérer avant, après le pack() ou même si avant/après n'a pas d'importance.

    J'ai cherché des tuto sur le net, mais jusqu'à présent je n'ai rien trouvé qui puisse m'aider.

    le code est le suivant:

    from tkinter import *
    root = Tk()
    
    var_texte = StringVar()
    ligne_texte = Entry(root, textvariable=var_texte, width=30)
    ligne_texte.pack()
    
    root.mainloop()

    Merci pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      18 septembre 2017 à 19:18:44

      from tkinter import *
      
      def get_entry(event):
          v = ligne_texte.get()
          print(v)
      
      root = Tk()
      
      ligne_texte = Entry(root, width=30)
      ligne_texte.pack()
      root.bind('<Return>', get_entry)
       
      root.mainloop()
      ?
      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2017 à 20:37:11

        Je me sens bête.

        Il faut en faite lui dire qu'on s'attends à ce que l'utilisateur presse entrer et en plus il faudra lui dire d'effacer après (mais ça je vais trouver tout seul )

        Bien le merci Oldprogrammer

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          18 septembre 2017 à 20:48:14

          Désolé pour la réponse rapide, j'avais pas le temps tout à l'heure...

          bind permet la liaison entre un événement (paramètre event) et la fonction d'appel. L’événement est l'appui sur la touche return qui sera lié à la fonction get_entry.

          Pour l'effacement, il me semble que c'est la méthode delete.

          widget.delete(0, END)

          END étant une variable tkinter



          • Partager sur Facebook
          • Partager sur Twitter
            19 septembre 2017 à 20:58:05

            Loin de moi l'envie d'abuser, mais je me suis dit que j'allais mettre tout ça dans une classe et et la fonction dans une méthode, et là, oh! surprise: ça ne marche plus Voilà que Tkinter m'accuse de vouloir faire rentrer deux argument là il n'en veut qu'un. 

            Voici le message d'erreur:

            Exception in Tkinter callback
            Traceback (most recent call last):
              File "C:\Python36\Lib\tkinter\__init__.py", line 1699, in __call__
                return self.func(*args)
            TypeError: get_entry() takes 1 positional argument but 2 were given


            Quant à mon code il est relativement semblable au tiens:

            from tkinter import *
            
            
            class Master(Frame):
            	"""Little classe to help me to get better"""
            
            	def __init__(self, master):
            
            		Frame.__init__(self, master)
            
            		self.text_entry = Entry(master, width=30)
            		
            		
            		#packages here
            		self.text_entry.pack()
            
            		self.master.bind("<Return>", self.get_entry)
            
            	def get_entry(event):
            		v=self.text_entry.get()
            		print(v)
            
            #sortie de la classe
            
            
            def test():
            	root= Tk()
            	master=Master(root)
            	root.mainloop()
            
            
            
            if __name__ == '__main__':
            	test()

            J'ai aussi essayé de mettre le bind() dans la fonction test() mais la réponse est la même. Et sans l'héritage c'est encore pire.

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              19 septembre 2017 à 21:11:54

              def get_entry(self, event):
              Il manque une partie importante, par convention le terme self, qui représente l'instance (objet créé par appel de la classe) de la classe. En gros get_entry est une méthode de l'objet créé par la classe Master.
              • Partager sur Facebook
              • Partager sur Twitter
                20 septembre 2017 à 17:07:52

                arf!! c'est pas la première fois que je l'oublie le self.

                Merci pour la patience.

                • Partager sur Facebook
                • Partager sur Twitter
                  7 octobre 2021 à 15:33:24

                  Est-ce qu'il est possible de mettre les Entry dans un dictionnaire et de récupérer la valeur ensuite à partir du dictionnaire ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 octobre 2021 à 17:10:22

                    bah oui, dans un dictionnaire, tu peux mettre n'importe quel type d'objet
                    • Partager sur Facebook
                    • Partager sur Twitter

                    TKinter, Entry, get()

                    × 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