IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

enregistrer les valeurs entrées, module tkinter


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut enregistrer les valeurs entrées, module tkinter
    Bonjour,
    Je souhaite dans un programme enregistrer(dans une liste) des valeurs entrées dans des boites de saisies (donc plusieurs simultanément) lors d'un clic sur un bouton.
    J'ai 2n-1 cases à remplir, je les ai donc crée avec une boucle comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            for i in range(n-1):
                txt_F=Label(fen, text='F'+str(i+1))
                entry_F= Entry(fen)
                txt_F.grid(row=3+i,column=1)
                entry_F.grid(row=3+i,column=2)
                entry_F.bind('<Return>', savevalue_F(i))       
                txt_P=Label(fen, text='P'+str(i+1))
                entry_P= Entry(fen)
                txt_P.grid(row=3+i,column=3)
                entry_P.grid(row=3+i,column=4)
    Je souhaite donc sauvegarder les valeurs rentrées dans une liste. Mais au vu de la construction de la boucle, je n'ai aucune facon d'appeler les 'variables cases' car elle sont propre à la boucle. J'ai essayé plusieurs méthodes.

    Méthode 1
    (en faisant la concession de devoir appuyer sur enter à chaque remplissage de case) en introduisant deux fonctions annexes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def savevalue_F(event,i):
        F[i]=entry_F.get()
    def savevalue_P(event,i):
        P[i]=entry_P.get()


    et en incorporant dans le 1er programme la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entry_F.bind('<Return>', savevalue_F(i))

    après la création du entry_F (et de meme pour entry_P)
    et avant la boucle la ligne
    L=[0 for i in range(n)]
    pour pouvoir remplir la liste mais ca ne fonctionne pas...

    Méthode 2:
    J'ai aussi essayer d'enregistrer l'adresse de chaque case crée dans la boucle en faisant:
    L[i]=entry_F (j'imagine qu'il faut bannir l'utilisation du append quand on utilise des fenêtre car d'apres ce que j'ai compris c'est comme si le programme tournait en continu, donc la liste grandirait tout le temps...)
    Mais encore une fois ca ne fonctionnait pas.

    Méthode 3:
    Enfin j'ai essayer de prendre les valeurs directement avec un .get() dans la boucle.

    PS:j'ai vu la construction de la méthode bind dans un livre et la fonction appelée contient le paramètre 'event' mais n'est pas utilis dans la fonction ce que je ne comprend pas. je m'en suis inspiré pour mon code sans trop comprendre ce paramètre.

    Merci d'avance pour votre aide!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 442
    Points : 37 034
    Points
    37 034
    Par défaut
    Salut,

    Vous semblez mélanger plusieurs problèmes.
    Pour ce qui est de récupérer la valeur entrée dans une liste d'Entry, lorsqu'on clique sur un Button, il suffit de construire une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> import tkinter as tk
    >>>
    >>> root = tk.Tk()
    >>> entries = []
    >>> for _ in range(3):
    ...     e = tk.Entry(root)
    ...     e.pack()
    ...     entries.append(e)
    ...
    >>> def do_showvalues():
    ...     for e in entries:
    ...        print (e.get())
    ...
    >>> tk.Button(root, text='show values', command=do_showvalue)
    >>> tk.mainloop()
    Après, il faut s'assurer que la saisie de chaque Entry est valide. Pour çà, il faut lire ce tuto.

    Enfin il faut contrôler la navigation (i.e. éventuellement forcer le focus à l'Entry qui doit être saisie) avec des "bind" judicieux.
    Mais, lorsqu'on commence à faire du vélo, il est prudent de garder ses deux mains sur le guidon et de regarder devant soi.

    - W

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse, j'ai pu réglé le soucis. Je ne comprends en revanche pas ce que vous voulez dire par controler la navigation...
    Merci encore

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 442
    Points : 37 034
    Points
    37 034
    Par défaut
    Citation Envoyé par duwkxu Voir le message
    Merci pour la réponse, j'ai pu réglé le soucis. Je ne comprends en revanche pas ce que vous voulez dire par controler la navigation...
    Lorsque votre interface sera "fonctionnelle", vous allez peut être vouloir que l'utilisateur ait rempli la case N avant d'essayer de remplir la case N+1... A défaut, pas facile de gérer la saisie des cases mal remplies lorsque l'utilisateur clique sur "valider"... mais vous ne vous posez peut être même pas ce genre de question.

    - W

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    oui, ca fait parti de mes exigences du coup dans la fonction qui enregistre les valeurs rentrées dans les cases de saisies, j'ai rajouté un 'try' avec une instruction qui a juste pour interêt de créer une erreur si la valeur saisie n'est pas conforme:
    dec=float(entry.get())
    si l'utilisateur oublie de remplir une case ou n'entre pas un nombre décimal, l'algorithme lance alors une fenêtre d'erreur pour lui dire de tout remplir et avec des décimaux.

Discussions similaires

  1. conserver les valeurs entrées dans un formulaire
    Par mitmit dans le forum Langage
    Réponses: 5
    Dernier message: 03/05/2007, 11h09
  2. Réponses: 1
    Dernier message: 30/04/2007, 00h02
  3. Garder en mémoire les valeurs entrées par l'utilisateur
    Par dessinateurttuyen dans le forum Langage
    Réponses: 11
    Dernier message: 17/08/2006, 10h15
  4. [debutant]toutes les valeurs entre cotes ?
    Par goony dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/04/2006, 11h13
  5. [VBA-E] Comparer les valeurs entre classeur
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/03/2006, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo