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

Tkinter Python Discussion :

Récupérer un texte dans une variable


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Récupérer un texte dans une variable
    Bonsoir à tous,
    J'ai commencé à apprendre à utiliser Tkinter aujourd'hui. C'est vraiment excellent d'ailleurs. J'arrive à maîtriser plus ou moins les divers objets, mais j'ai un problème avec les Entry. Je vous avoue que ma question est hyper basique et que j'ai un peu honte de vous déranger pour ça, mais je ne réussis pas à stocker un texte inséré dans une Entry, dans un string. J'ai regardé sur le net, mais je n'ai rien trouvé qui corresponde à ma questions, les problèmes survenus étant d'une complexité un peu supérieure. Voici mon code

    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
    16
    17
    18
    # -*-coding:Latin-1 -*
    from tkinter import *
     
    a = "perdu"
    def valider():
        a = entree.get()  
        fenetre.destroy()
     
    fenetre = Tk()
    val = StringVar()
    val.set("par defaut")
    entree = Entry(fenetre,textvariable=val,width=20)
    entree.pack()
    bouton = Button(fenetre,text="Valider",command=valider)
    bouton.pack()
    print(a)
    fenetre.mainloop()
    input() #pour windows
    Je m'arrache les cheveux pour que la valeur saisie dans l'Entry soit stockée dans la variable a. J'ai un peu essayé toutes les possibilités, en vain. C'est sûrement un truc très facile, mais je n'ai toujours pas réussi à trouver, et ça m'agace !
    Donc voilà, merci d'avance pour votre aide, a priori ça doit être très basique, mais je dois être tellement idiot que c'est trop difficile pour moi !

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    En trois points.

    -1 print(a) est exécuté immédiatement, pas beaucoup d'intérêt.

    -2 Pourquoi détruis-tu ta fenêtre dans la fonction valider() ?

    -3 La référence a de la fonction n'est pas forcément la même que celle de l'espace global.


    Une piste vers la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def valider():
        print('Entry: %s' % entree.get())

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    Je détruis la fenêtre pour que celle-ci se ferme après avoir saisi le texte.
    En fait, je ne veux pas juste afficher la chaine saisie par l'utilisateur ; je veux stocker celle-ci dans un string, en l’occurrence a dans mon exemple. En fait dans mon programme, un utilisateur saisit un texte, et j'aimerais que ce texte soit stocké dans un attribut string d'un objet.
    Mon print(a) n'avait d'intérêt que de vérifier si a prenait bien la valeur saisie dans l'Entry, ce qui ne semble pas être le cas. Je ne sais pas si c'est clair.

  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
    Salut,

    Citation Envoyé par bdx3324 Voir le message
    Je détruis la fenêtre pour que celle-ci se ferme après avoir saisi le texte.
    En fait, je ne veux pas juste afficher la chaine saisie par l'utilisateur ; je veux stocker celle-ci dans un string, en l’occurrence a dans mon exemple. En fait dans mon programme, un utilisateur saisit un texte, et j'aimerais que ce texte soit stocké dans un attribut string d'un objet.
    Mon print(a) n'avait d'intérêt que de vérifier si a prenait bien la valeur saisie dans l'Entry, ce qui ne semble pas être le cas.
    Je ne sais pas si c'est clair
    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = "perdu"
    def valider():
        a = entree.get()  
        fenetre.destroy()
    le "a" de la fonction valider est "local" à la fonction et disparaît lorsque celle ci se termine.
    Si vous voulez modifier le "a" global, il faut le préciser avec le mot clé qui va bien.

    Ces notions là sont généralement bien expliquées dans tous les tutos.

    De plus vous comprenez que print (a) ne pourra montrer une nouvelle valeur que si cette instruction est exécutée qu'après un passage par "valider" i.e. un click sur le bouton qui va déclencher ce callback. Techniquement, c'est au retour de mainloop (et donc placer cette instruction "après" si vous voulez voir un changement.).

    - W

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    J'ai bien essayé de mettre global a juste avant la ligne de l'affectation dans la fonction valider(), mais j'ai toujours la même chose, mon print(a) me laisse "perdu". Bon peut être est-ce dû au fait que Python est un langage interprété, mais j'ai l'impression que ça ne modifie pas a...

    EDIT : Aaaah oui quand je fais un print(a) en dehors du mainloop la modification est effectivement prise en compte ! Merci beaucoup !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/11/2014, 21h43
  2. Récupérer un bout de fichier texte dans une variable
    Par killerman31 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 15/01/2009, 13h03
  3. Récupérer le contenu d'un fichier texte dans une variable
    Par heureactuelle dans le forum MATLAB
    Réponses: 2
    Dernier message: 17/05/2008, 16h10
  4. récupérer une partie d'un texte dans une variable
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/05/2008, 12h18
  5. Plusieurs lignes de texte dans une variable texte
    Par Loko dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 15/12/2005, 13h51

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