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 :

Entry & get


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut Entry & get
    Bonjour,

    A la fin de la procédure 'fenetrenom' ci-dessous, je souhaiterais pouvoir récupérer la chaîne nomvv (obtenue par 'get()' dans 'fenetrecup'), mais la méthode lambda m'en empêche.

    Qui pourrait m'aider ? Merci par avance.

    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
    def fenetrecup() :
        nomvv = aa.get() # comment récupérer nomvv dans fenetrenom ???
     
    def fenetrenom () :
        global aa
        bo = ' '
        while not bo == '' :
            fennom = Toplevel(racine)
            text1 = Tk.Label (fennom, text = 'Nom ?\n')
            text1.pack()
            aa = Tk.Entry(fennom, width=16)
            aa.pack()
            q0 = lambda: ouvfen_dotwo(fenetrecup, fennom.destroy)
            bout9 =Tk.Button (fennom, command = q0, text = 'Valider')
            bout9.pack()
            bo = verif_nom (nomvv) # chaîne nomvv à récupérer depuis fenetrecup pour cette fonction...

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Voici quelque chose de proche de votre while not bo == '' :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as tk
     
    def fenetrecup(result):
        print(result)
        l.config(text=result)
     
    def fenetrenom():
        def onclose():
            result = aa.get()
            if result:
                fenetrecup(result)
                fennom.destroy()
     
        fennom = Tk.Toplevel(master=racine)
        fennom.transient(master=racine) # Bonus
        fennom.attributes("-topmost", 1) # Bonus
        Tk.Label(fennom, text='Nom ?').pack(padx=5, pady=5)
        aa = Tk.Entry(fennom, width=16)
        aa.pack(padx=5, pady=5)
        Tk.Button(fennom, command=onclose, text='Valider').pack(padx=5, pady=5)
        fennom.protocol("WM_DELETE_WINDOW", onclose) # Bonus
     
    racine = Tk.Tk()
    Tk.Label(racine, text='Nom :').pack(padx=5, pady=5)
    l = Tk.Label(racine)
    l.pack(padx=5, pady=5)
    Tk.Button(racine, text='Quitter', command=racine.quit).pack(padx=5, pady=5)
    fenetrenom()
    racine.mainloop()
    Je vous y rajoute quelques bonus au passage.

    @+

    Note : Vous n'avez pas 'nettoyer' vos imports
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            fennom = Toplevel(racine)
            text1 = Tk.Label (fennom, text = 'Nom ?\n')
    Vous avez encore from Tkinter import * et import Tkiner as Tk.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut
    Tout d'abord, merci de votre réponse avisée.

    Citation Envoyé par PauseKawa Voir le message
    Note : Vous n'avez pas 'nettoyer' vos imports
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            fennom = Toplevel(racine)
            text1 = Tk.Label (fennom, text = 'Nom ?\n')
    Vous avez encore from Tkinter import * et import Tkiner as Tk.
    Si si, simplement je n'ai extrait de mon programme que les procédures qui m'intéressaient, et édulcoré quelques instructions 'parasites' à la compréhension du problème.

    Suite à votre message, j'ai effectué quelques rectifications, mais :

    Pour ce qu'il en est ici, je pense m'être mal fait comprendre : je ne souhaite pas seulement écrire le nom entré dans une fenêtre, je veux garder la chaîne correspondante dans la variable chaîne 'nomvv', j'en ai besoin ensuite pour :
    1) vérifier la cohérence du nomvv introduit ;
    2) créer un fichier, via 'open', dont le nom sera nomvv + '.text'.

    En cela réside mon problème.

    Si vous pouvez m'aider, merci par avance.

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    def verifnomvv():
        if nomvv.get() != "":
            print(nomvv.get())
        else:
            print('Nok')
     
    def writenomvv():
        value = nomvv.get()
        if value != '':
            with open(value + ".text", "w") as f:
                f.write("coucou")
     
    def fenetrenom():
        fennom = Tk.Toplevel(master=racine)
        fennom.attributes("-topmost", 1) # Bonus
        Tk.Label(fennom, text="Nom ?").pack(padx=5, pady=5)
        Tk.Entry(fennom, textvariable=nomvv, width=16).pack(padx=5, pady=5)
        Tk.Button(fennom, command=fennom.destroy, text="Quitter").pack(padx=5, pady=5)
     
    racine = Tk.Tk()
    nomvv = Tk.StringVar()
    Tk.Button(racine, text="Vérif nomvv", command=verifnomvv).pack(padx=5, pady=5)
    Tk.Button(racine, text="Ecrire nomvv.text", command=writenomvv).pack(padx=5, pady=5)
    Tk.Button(racine, text="Quitter", command=racine.quit).pack(padx=5, pady=5)
    fenetrenom()
    racine.mainloop()

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        import Tkinter as Tk
    except:
        import tkinter as tk
    Oups...

  6. #6
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut
    Si je comprends bien, on ne peut pas faire autrement que mettre un bouton dans la fenêtre racine... ??? (pour le mainloop, j'imagine)

    J'aurais aimé pouvoir m'en dispenser : que le bouton 'Valider' de fennom fasse à la fois tout cela :

    - enregistrer la réponse apportée dans la chaîne nomvv, pour utilisations ultérieures ;
    - fermer la fenêtre fennom.

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    les boutons ne sont là que pour l'exemple.
    Je vous montre juste que vous pouvez utiliser la classe Variable Tkinter pour stocker votre valeur (ici via textvariable. Sinon c'est .set(valeur)).
    Celle ci est ensuite disponible, même après la fermeture du Toplevel.
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    def fenetrecup() :
        value = nomvv.get()
        if value != '':
            with open(value + ".text", "w") as f:
                f.write("coucou")
     
    def fenetrenom():
        def onclose():
            # A vous de voir vos conditions.
            if nomvv.get() != "":
                fennom.destroy()
     
        fennom = Tk.Toplevel(master=racine)
        fennom.transient(master=racine) # Bonus
        fennom.attributes("-topmost", 1) # Bonus
        Tk.Label(fennom, text='Nom ?').pack(padx=5, pady=5)
        Tk.Entry(fennom, textvariable=nomvv, width=16).pack(padx=5, pady=5)
        Tk.Button(fennom, command=onclose, text='Valider').pack(padx=5, pady=5)
        fennom.protocol("WM_DELETE_WINDOW", onclose) # Bonus
     
    racine = Tk.Tk()
    Tk.Label(racine, text='Nom :').pack(padx=5, pady=5)
    l = Tk.Label(racine)
    l.pack(padx=5, pady=5)
    nomvv = Tk.StringVar(master=racine)
    Tk.Button(racine, text='Afficher le Nom',
              command=lambda: l.config(text=nomvv.get())).pack(padx=5, pady=5)
    Tk.Button(racine, text='Ecrire', command=fenetrecup).pack(padx=5, pady=5)
    Tk.Button(racine, text='Quitter', command=racine.quit).pack(padx=5, pady=5)
    fenetrenom()
    racine.mainloop()
    A vous de mettre les boites dans le sens que vous voulez.

    @+

  8. #8
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut
    Enfin, le problème est résolu...

    Cela donne finalement ceci :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    def debut_av () :   ### paramétrage début
        la = 10
        lo = 10
        cartex = init_carte (la, lo)
        affiche_carte ('', la, lo, cartex, [])
        nomvv = fenetrenom ()  ### ouvre une fenêtre demandant nom & vérifiant
        mission(nomvv, 0, la, lo, carte) ### lance la mission
     
    def fenetrenom () :   ### ouvre une fenêtre demandant le nom
     
        def onclose() : ### récupère nom & ferme 'fennom' si le nom est valide
            value=nom.get()
            bo = verif_nom (value) ### vérifie la validité du nom entré & retourne le motif de l'erreur (ou '' sinon)
            if bo == '' :
                fennom.destroy()
            else :
                txbo.config(text = bo) ### modifie le texte de la première ligne de 'fennom' selon l'erreur commise
                txbo.pack(padx=5,pady=5)
     
        nomvv = ''
        fennom = Tk.Toplevel (master=racine)
        fennom.transient (master=racine)
        fennom.wm_geometry('%dx%d+%d+%d' % (600, 270, 400, 260))
        fennom.title ('Nom du Village Vacances')
        fennom.config(bg = 'dark grey')
        while nomvv == '' :
            txbo = Tk.Label (fennom, text = 'Nom du VV ?\n(de 3 à 16 lettres)', fg = 'black', bd = 16, bg = 'dark grey', font = beb16)
            txbo.pack(padx=5, pady=5)
            Tk.Entry(fennom, textvariable=nom, width=16, font = 'Arial 16').pack(padx=5, pady=5)
            Tk.Label (fennom, text = '\n', bg = 'dark grey').pack(padx=5, pady=5)
            Tk.Button (fennom, command = onclose, text = 'Valider', bd = 16, bg = 'yellow', font = beb16).pack(padx=5, pady=5)
            fennom.protocol('WM_DELETE_WINDOW', onclose)
            racine.mainloop()
            nomvv=nom.get()
        return nomvv
    avec un 'nom = Tk.StringVar(master=racine)' dans le programme principal.


    Et cela correspond à mes attentes, mais que ce fut dur à comprendre pour le néophyte que je suis.

    En tout cas, merci pour les réponses apportées, elles m'ont été plus qu'utiles...

    --- Problème résolu ---

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

Discussions similaires

  1. Problème avec get (entry button)
    Par Raskaya dans le forum Tkinter
    Réponses: 7
    Dernier message: 03/10/2013, 16h21
  2. Réception du contenu d'une entry avec .get()
    Par pieral85 dans le forum Tkinter
    Réponses: 7
    Dernier message: 04/04/2012, 17h09
  3. Message 'Duplicate index entry'
    Par Poulou dans le forum Administration
    Réponses: 13
    Dernier message: 04/05/2004, 14h57
  4. url d'une page asp ou upload avec get
    Par taupin dans le forum ASP
    Réponses: 18
    Dernier message: 22/08/2003, 14h25

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