Récupérer un entry dans une variable

Résolu
Komode -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai commencé à apprendre la programmation python il y a quelques semaines et pour que mais premiers programmes prennent formes je me suis intéressé au modul tkinter, mais voilà que je n'arrive pas à comprendre comment les valeurs écrites dans un widgets notamment un entry puissent être récupérer dans une variable et conservé comme tout autre contenue de variable.

Merci à ceux qui pourront me répondre cela me bloque dans mon apprentissage depuis plusieurs jours.

4 réponses

  1. vortex
     
    Bonsoir,

    La valeur d'un widget Entry se récupère en utilisant une variable tkinter et en la passant à Entry via son paramètre textvariable.

    Exemple basique avec un test pour valider une saisie en utilisant la mèthode trace de StringVar.

    import tkinter as tk
    
    def check_value(*args):
        # Une simple fonction pour l'exemple qui vérifie si la valeur est un nombre
        # et de longueur de moins de 11 caractères et qui l'écrit dans un label
        # Si saisie invalide, retour de la valuer de la variable à celle précédente.
        value = entry_value.get()
        if value.isdigit() and len(value) <= 10 or not value:
            label['text'] = value
        else:
            entry_value.set(label['text'])
    
    win = tk.Tk()
    
    frame = tk.Frame(win, bg='navy')
    frame.grid()
    
    entry_value = tk.StringVar()
    entry_value.trace('w', check_value)
    
    entry = tk.Entry(
        frame, textvariable=entry_value, width=30, bg='black', fg='white',
    )
    entry.grid(padx=25, pady=10)
    
    label = tk.Label(frame, width=30, bg='green', fg='white')
    label.grid(pady=(40, 10))
    
    entry.focus_set()
    
    win.mainloop()


    Il existe aussi dans le widget Entry, les paramètres validate et validatecommand servant à vérifier et autoriser la saisie, sans doute un peu plus élaboré qu'en utilisant Var.trace.
    1
    1. Komode
       
      Merci beaucoup de ta réponse mais je n'arrive pas utiliser les widgets de ton programme.
      0
  2. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour,

    ou bien comme ceci:
    def show_result(event):
        resultat = e2.get()
    
    e2 = Entry(main_win)
    e2.place(x = 10,y = 110)
    e2.bind("<Return>", show_result)
    0
    1. Komode
       
      Merci beaucoup cependant en utilisant ta méthode je n'arrive toujours pas à utiliser la valeur en entry comme une autre variable.
      0
  3. Komode
     
    Désoler mais j'ai toujours du mal à le mettre en pratique

    pour essayer de donner plus de précision sur mon problème voilà un petit programme que j'ai fait où j'aimerai récupérer la variable en entry pour la print et ainsi confirmer qu'elle est bien stocké dans une variable "standard".


    from tkinter import *

    result = ""

    def recup(*args):
    result = var_entry.get()
    return result

    window = Tk()
    window.geometry("400x300")

    var_entry = StringVar()
    var_entry.trace("w",recup)

    e = Entry(window, textvariable=var_entry)
    e.pack()

    window.mainloop()

    print(result)

    0
    1. vortex
       
      Bonjour,

      Tout ce qui est après le mainloop ne sera exécuté que lorsque la fenêtre tkinter sera fermée.

      De plus, pourquoi veux-tu stocker la valeur dans une autre variable ? Pour quoi faire ? Tu as accès à ce qu'elle vaut en utilisant la méthode get, tu peux l'afficher directement dans ta fonction recup.

      Que souhaites-tu réaliser au juste avec cette entry dans ton script ?
      0
  4. Komode
     
    Pour le print après la fonction mainloop j’avais bien saisi qu’il fallait fermer la fenêtre pour qu’il s’exécute, cela avait pour but de vérifier si j’avais accès à la valeur du entry. Le programme quand à lui je le fait juste pour essayer de comprendre comment fonctionne le widgets entry.

    Je ne vois pas comment utiliser la fonction .get() pour par exemple print la valeur, pourrait tu m’indiquer comment je doit écrire le script pour que la valeur en entry soit print dans la console une fois que la fenêtre est fermer.

    Merci beaucoup de ta réactivité
    0
    1. vortex
       
      Simplement en faisant un
      print(entry_value.get())
      .

      Code sans fonction de vérification, réduit au plus simple.

      import tkinter as tk
      
      win = tk.Tk()
      
      entry_value = tk.StringVar()
      
      entry = tk.Entry(win, textvariable=entry_value, width=30, bg='black', fg='white',)
      entry.grid(padx=25, pady=10)
      
      entry.focus_set()
      
      win.mainloop()
      
      print(entry_value.get())
      0
      1. Komode > vortex
         
        Merci beaucoup, je pense bien que c'était la solution que je chercher pour manipuler les valeur d'un entry comme je le voulais.
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Komode
         
        bonjour, peux-tu alors marquer la discussion comme résolue?
        0