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 Entry() depuis un Toplevel()


Sujet :

Tkinter Python

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut Récupérer un Entry() depuis un Toplevel()
    Bonjour,

    J'ai un petit soucis avec les Entry() et les Toplevel()

    J'ai une instance de la classe Tk(), depuis laquelle j'appelle divers fonctions.
    Dans l'une de ces fonctions, je veux demander le nom/pseudo de l'utilisateur, soit :
    - afficher une fenêtre Toplevel() qui contient un Entry()
    - l'utilisateur tape son nom, valide, la fenêtre disparaît
    - le contenu de entry_pseudo.get() doit être affecté à une variable pseudo, variable qui est dans la fonction qui a appelé la fenêtre Toplevel
    Évidemment, il faut cette fonction se mette "en pause", le temps que l'utilisateur saisisse son pseudo.

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def fenetreDemanderPseudo():
        win_pseudo = Toplevel()
        win_pseudo.bind("<Return>", ?????)
        entry_pseudo = Entry(win_pseudo, width=30)
        entry_pseudo.pack(padx=5, pady=5)
     
    def foobar():
        # ....
        # ....
        pseudo = fenetreDemanderPseudo()
    J'ai essayé par mal de trucs, souvent pas très propres, et au final je n'ai pas beaucoup avancé...
    Comment exécuter un return entry_pseudo.get() ?
    Et comment exécuter un win_pseudo.destroy() une fois le pseudo entré ?

    Merci.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Haze.
    Bonjour,

    J'ai un petit soucis avec les Entry() et les Toplevel()

    J'ai une instance de la classe Tk(), depuis laquelle j'appelle divers fonctions.
    Dans l'une de ces fonctions, je veux demander le nom/pseudo de l'utilisateur, soit :
    - afficher une fenêtre Toplevel() qui contient un Entry()
    - l'utilisateur tape son nom, valide, la fenêtre disparaît
    - le contenu de entry_pseudo.get() doit être affecté à une variable pseudo, variable qui est dans la fonction qui a appelé la fenêtre Toplevel
    Évidemment, il faut cette fonction se mette "en pause", le temps que l'utilisateur saisisse son pseudo.

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def fenetreDemanderPseudo():
        win_pseudo = Toplevel()
        win_pseudo.bind("<Return>", ?????)
        entry_pseudo = Entry(win_pseudo, width=30)
        entry_pseudo.pack(padx=5, pady=5)
     
    def foobar():
        # ....
        # ....
        pseudo = fenetreDemanderPseudo()
    J'ai essayé par mal de trucs, souvent pas très propres, et au final je n'ai pas beaucoup avancé...
    Comment exécuter un return entry_pseudo.get() ?
    Et comment exécuter un win_pseudo.destroy() une fois le pseudo entré ?

    Merci.

    Je n'ai pas bien compris comment tu voulais récupérer ton pseudo mais cepedant je te propose une solution pour le récupérer au lieu de faire un return :

    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
    19
    20
    21
    22
    from Tkinter import *
     
    def fenetre_demander_pseudo():
    	global entree1
    	fen2=Toplevel()
    	fen2.title("Pseudo")
    	b1=Button(fen2,text='Valider',command=foobar)
    	entree1=Entry(fen2,width=14,bg='cyan',font='Arial 24')
    	entree1.pack()
    	b1.pack()
    	fen2.mainloop()
     
    def foobar():
    	pseudo=str(entree1.get())
    	print pseudo  #par exemple
     
    fen=Tk()  
    fen.title("Recup Pseudo")
     
    b1=Button(fen,text='pseudo',command=fenetre_demander_pseudo)
    b1.pack()
    fen.mainloop()

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Salut,

    Merci bien pour ton aide xEndLe, cependant j'ai trouvé la solution à mon problème entre temps.
    Pour ceux qui ça intéresserait, voici mon code complet:

    Code Python : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    from Tkinter import *
     
    def fenetreDemanderPseudo():
     
    	def enregistrer(event = None):
    		pseudo = entry_pseudo.get()
    		# le pseudo ne doit pas être nul
    		if pseudo != "":
    			win_pseudo.destroy()
    			print pseudo
    			# je peux ensuite continuer mon traitement :)
     
    	win_pseudo = Toplevel()
    	win_pseudo.title("Enregistrement")
    	win_pseudo.bind("<Return>", enregistrer)
     
    	Label(win_pseudo, text="Veuillez entrer votre pseudo :").pack(pady=10, padx=5)
    	entry_pseudo = Entry(win_pseudo, width=30)
    	entry_pseudo.pack(padx=5, pady=5)
     
    	Button(
    		win_pseudo, text="Valider", relief=GROOVE, command=enregistrer
    		).pack(pady=5, padx=5, side=LEFT)
    	Button(
    		win_pseudo, text="Annuler", relief=GROOVE, command=win_pseudo.destroy
    		).pack(padx=5, pady=5, side=RIGHT)
     
    root=Tk()
     
    Button(root, text="Demander pseudo", command=fenetreDemanderPseudo).pack(padx=5, pady=5)
    Button(root, text="Fermer", command=root.destroy).pack(padx=5, pady=5)
    root.mainloop()

    De cette manière, j'évite d'utiliser une variable globale, de plus il fallait aussi que la fenêtre du Entry() se détruise après saisie du pseudo.

    Merci à goomie qui m'a donné l'idée de mettre deux def imbriqués.

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

Discussions similaires

  1. récupérer le mail depuis outlook
    Par crakocrako dans le forum ASP
    Réponses: 7
    Dernier message: 01/04/2006, 12h12
  2. [Utilisation] Récupérer les modifications depuis une date donnée
    Par Sapience dans le forum CVS
    Réponses: 1
    Dernier message: 15/02/2006, 12h08
  3. [MySQL] récupérer plusieurs tuples depuis un array
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/12/2005, 18h17
  4. Récupérer le MCD depuis la base
    Par cladsam dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/11/2005, 16h01
  5. [Eclipse] [VSS plugin] Récupérer un projet depuis le server?
    Par Bobsinglar dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 23/05/2005, 17h12

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