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ération d'entrées utilisateur


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut Récupération d'entrées utilisateur
    Bonjour

    je sais récupérer les informations qu'entre un utilisateur en utilisant Entry() et ensuite get()

    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
    nom = Label(fenetre, text = "Entrer un Nom")
    nom.grid(row = 0, column = 0, padx = 5, pady =10)
    prenom = Label(fenetre, text = "Entrer un Prénom")
    prenom.grid(row = 2, column = 0, padx = 5, pady =10)
    age = Label(fenetre, text = "Entrer un Age")
    age.grid(row = 4, column = 0, padx = 5, pady =10)
     
    entrNom = Entry(fenetre, width = 45)
    entrNom.grid(row = 0, column = 1, padx = 5, pady = 10)
    entrPrenom = Entry(fenetre, width = 45)
    entrPrenom.grid(row = 0, column = 1, padx = 5, pady = 10)
    entrAge = Entry(fenetre, width = 45)
    entrAge.grid(row = 0, column = 1, padx = 5, pady = 10)
     
    val1 = entrNom.get()
    val2 = entrPrenom.get()
    val3 = entrAge.get()
    Je voudrais savoir s'il est possible et dans ce cas comment récupérer les données entrées en faisant comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for line, item in personnes (["Nom", "Prenom", "Age"]):
        l = Label(fenetre, text = item, width = 10)
        e = Entry(fenetre, width = 10)
        l.grid(row = line, column = 0, padx = 5, pady = 10)
        e.grid(row = line, column = 1, padx = 5, pady = 10)

    Merci d'avance

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Salut,

    Je ne suis pas expert en TKinter, loin s'en faut (plutot pygtk), mais je ne pense pas me tromper en disant que tu ne peux pas faire cela, car un objet est UN objet. De fait, pour chaque Entry que tu veux afficher, il faut créer une instance de cet objet.

    Par contre tu peux surement faire quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    list_entry = []
    list_label = []
    for <ta_condition>:
        list_label.append(Label(fenetre, text = item, width = 10))
        list_entry.append(Entry(fenetre, width = 10))
    Bien sur il faut s'adapter à ton cas, mais ici, de fait, tu as une list qui contient toute tes instances, que tu peu alors redeployer aisement.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,
    Si on essaie de respecter la structure donnée par les noms de vos variables, on peut stocker les Entry dans un dict:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    labels = 'Nom', 'Prenom', 'Age'
    personne = { 'Nom': nom, 'Prenom': prenom, 'Age': age }
     
    entries = {}
    for row, key in enumerate(labels):
        Label(fenetre, text = personne[key], width = 10).grid(
                           row = line, column = 0, padx = 5, pady = 10)
        entry  = entries[key] = Entry(fenetre, width = 10)
        entry.grid(row = line, column = 1, padx = 5, pady = 10)
     
    val1 = entries['Nom'].get() #entrNom.get()
    val2 = entries['Prenom'].get() #entrPrenom.get()
    val3 = entries['Age'].get() #entrAge.get()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par melwin Voir le message
    Bonjour

    je sais récupérer les informations qu'entre un utilisateur en utilisant Entry() et ensuite get()

    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
    nom = Label(fenetre, text = "Entrer un Nom")
    nom.grid(row = 0, column = 0, padx = 5, pady =10)
    prenom = Label(fenetre, text = "Entrer un Prénom")
    prenom.grid(row = 2, column = 0, padx = 5, pady =10)
    age = Label(fenetre, text = "Entrer un Age")
    age.grid(row = 4, column = 0, padx = 5, pady =10)
     
    entrNom = Entry(fenetre, width = 45)
    entrNom.grid(row = 0, column = 1, padx = 5, pady = 10)
    entrPrenom = Entry(fenetre, width = 45)
    entrPrenom.grid(row = 0, column = 1, padx = 5, pady = 10)
    entrAge = Entry(fenetre, width = 45)
    entrAge.grid(row = 0, column = 1, padx = 5, pady = 10)
     
    val1 = entrNom.get()
    val2 = entrPrenom.get()
    val3 = entrAge.get()
    Je voudrais savoir s'il est possible et dans ce cas comment récupérer les données entrées en faisant comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for line, item in personnes (["Nom", "Prenom", "Age"]):
        l = Label(fenetre, text = item, width = 10)
        e = Entry(fenetre, width = 10)
        l.grid(row = line, column = 0, padx = 5, pady = 10)
        e.grid(row = line, column = 1, padx = 5, pady = 10)

    Merci d'avance
    Bonjour,

    Votre demande n'est pas super claire, mais si vous cherchez un générateur de formulaire pour économiser du code à écrire, peut-être devriez-vous vous intéresser à tkRAD - XML Widget Builder ( PyPI : https://pypi.python.org/pypi/tkRAD + doc en français : https://github.com/tarball69/tkRAD/wiki/Accueil ) qui vous permet d'écrire des choses dans ce style :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import tkRAD
     
    mainwindow = tkRAD.RADXMLMainWindow()
     
    xml = """
    <tkwidget>
        <tkmenu>
            <menu label="_Fichier">
                <command
                    label="_Quitter"
                    accelerator="Ctrl+Q"
                    command="@quit"
                />
            </menu>
        </tkmenu>
        <ttkframe
            padding="10"
            layout="pack"
            resizable="yes"
        >
            <ttklabel
                text="Veuillez saisir un NOM:"
                layout="pack"
                resizable="width"
            />
            <ttkentry
                name="ent_nom"
                layout="pack"
                resizable="width"
            />
            <ttklabel
                text="Veuillez saisir un PRENOM:"
                layout="pack"
                resizable="width"
            />
            <ttkentry
                name="ent_prenom"
                layout="pack"
                resizable="width"
            />
            <ttklabel
                text="Veuillez saisir un AGE:"
                layout="pack"
                resizable="width"
            />
            <ttkentry
                name="ent_age"
                layout="pack"
                resizable="width"
            />
            <ttkbutton
                text="Valider"
                command=".submit_form"
                layout="pack"
                layout_options="side='right'"
            />
        </ttkframe>
    </tkwidget>
    """
     
    def func1 (*args, **kw):
        "NOTE: le mieux reste encore de dériver RADXMLMainWindow"
     
        widgets = mainwindow.mainframe
     
        print("NOM: '{}'".format(widgets.ent_nom.get()))
     
        print("PRENOM: '{}'".format(widgets.ent_prenom.get()))
     
        print("AGE: '{}'".format(widgets.ent_age.get()))
     
    # end def
     
    mainwindow.submit_form = func1
     
    mainwindow.xml_build(xml)
     
    mainwindow.run()
    Maintenant, si vous ne voulez qu'une itération de champs de saisie, vous pouvez procéder comme 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    from tkinter import *
     
     
    def valider_formulaire ():
     
        for (name, entry) in entrees:
     
            print("champ '{}' = '{}'".format(name, entry.get()))
     
        # end for
     
    # end def
     
     
    fenetre = Tk()
    fenetre.title("Formulaire saisie")
    fenetre.resizable(width=False, height=False)
     
    entrees = list()
     
    champs = (
        "NOM", "PRENOM", "AGE", "ADRESSE1", "ADRESSE2", "CODE_POSTAL",
        "VILLE",
    )
     
    n_row = 0
     
    options = dict(sticky=W, padx=5, pady=5)
     
    for label in champs:
     
        Label(fenetre, text=label).grid(row=n_row, column=0, **options)
     
        entry = Entry(fenetre, width=10)
     
        entry.grid(row=n_row, column=1, **options)
     
        entrees.append((label, entry))
     
        n_row += 1
     
    # end for
     
    Button(
        fenetre,
        text="Valider",
        command=valider_formulaire,
    ).grid(row=n_row, column=0, sticky=E, padx=5, pady=5)
     
    Button(
        fenetre,
        text="Quitter",
        command=fenetre.destroy,
    ).grid(row=n_row, column=1, sticky=E, padx=5, pady=5)
     
    fenetre.mainloop()
    @+.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Par défaut
    Merci pour vos différentes réponses, je vais regarder toutes ces solutions proposées, même si pour l'instant je souhaite me cantonner à Tkinter pour apprendre à mieux maitriser python.

    C'était effectivement pour économiser du code, parce que mon exemple se limitait à 3 valeurs mais avec plus de valeurs bonjour le nombre de lignes.
    Le but final étant de demander à l'utilisateur des valeurs qui vont ensuite être entrées dans une base de données.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par melwin Voir le message
    Merci pour vos différentes réponses, je vais regarder toutes ces solutions proposées, même si pour l'instant je souhaite me cantonner à Tkinter pour apprendre à mieux maitriser python.

    C'était effectivement pour économiser du code, parce que mon exemple se limitait à 3 valeurs mais avec plus de valeurs bonjour le nombre de lignes.
    Le but final étant de demander à l'utilisateur des valeurs qui vont ensuite être entrées dans une base de données.
    Merci de cliquer sur si votre problème a trouvé réponse.

    @+.

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

Discussions similaires

  1. Récupération des droits utilisateur
    Par albanhig dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/05/2007, 17h10
  2. récupération de l'utilisateur du poste
    Par guitoo dans le forum ASP.NET
    Réponses: 6
    Dernier message: 28/02/2007, 15h29
  3. partager une appli entre utilisateurs sous XP familial
    Par biozaxx dans le forum Windows XP
    Réponses: 5
    Dernier message: 13/10/2006, 16h52
  4. récupération texte entre <option> et </option>
    Par Trunks dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/09/2005, 14h19
  5. Réponses: 3
    Dernier message: 06/02/2004, 11h46

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