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 :

Nommer dynamiquement des widgets ENTRY


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 25
    Par défaut Nommer dynamiquement des widgets ENTRY
    Bonjour tout le monde,

    Je me heurte à un problème.
    Je souhaite gérer la saisie sur un nombre indéterminé de lignes avec plus widgets ENTRY.
    La modification de ces widgets est associée à une fonction (la même fonction pour toutes les lignes).
    Je voudrais donc les nommer dynamiquement afin de pouvoir récupérer le contenu de la bonne ligne dans la fonction associée.

    Cela est il envisageable?

    En espérant avoir été à peu près clair... D'avance, merci.

    PS: Voici à quoi ressemble mon écan :
    Nom : 2014-02-26_105300.gif
Affichages : 724
Taille : 31,9 Ko

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 43
    Par défaut
    Bonjour,

    je vais essayer de faire un truc à ma sauce, je ne sais pas si ça va répondre à tes interrogations.

    Si j'ai bien compris tu souhaite gérer un nombre indéfini de widget Entry() mais pour les utiliser tu voudrais qu'ils soient correctement identifiés. En gros si tu as x Entry() tu voudrais qu'elles soient identifiés Entree1, Entree2, ..., Entreex? Si c'est ce qui te bloque tu peux peut être passer par "globals()" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from Tkinter import *
    fenetre = Tk()
    NbrEntry = 6
    NameEntry = []
    for i in range(NbrEntry):
        globals()["Entree"+str(i)] = Entry(fenetre)
        globals()["Entree"+str(i)].pack()
        NameEntry.append("Entree"+str(i))
    Les différents Entry() existants sont alors stockés dans "NameEntry". Après je dois avouer que tout ça fait un peu bricolage....

  3. #3
    Membre averti
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 25
    Par défaut
    Merci!!!!

    Je suis un autodidacte débutant...
    J'ai essayé, le souci, c'est que je ne sais pas comment récupérer la valeur saisie dans l'entry.
    J'ai toujours la valeur de la dernière entry créée, lorsque je modifie une entry et que je fais "return".

    j'ai un peu implémenté ton 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
    19
    # -*- coding: iso-8859-15 -*-
    from tkinter import *
    import tkinter.ttk as ttk
    def affich(evt):
        print(globals()["Entree"+str(0)].get()) 
        print(globals()["Entree"+str(i)].get()) 
    fenetre = Tk()
    NbrEntry = 6
    NameEntry = []
    for i in range(NbrEntry):
        xn_entree=StringVar()
        xn_entree.set("Entree"+str(i))
     
        globals()["Entree"+str(i)] = Entry(fenetre, bg ="ivory", width =20,justify=CENTER,textvariable=xn_entree, borderwidth=2, relief=RIDGE)
        globals()["Entree"+str(i)].bind("<Return>", affich)
        globals()["Entree"+str(i)].pack()
        NameEntry.append("Entree"+str(i))
     
    fenetre.mainloop()

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 43
    Par défaut
    Je suis un autodidacte débutant...
    Comme ça on est deux

    J'ai essayé, le souci, c'est que je ne sais pas comment récupérer la valeur saisie dans l'entry.
    J'ai toujours la valeur de la dernière entry créée, lorsque je modifie une entry et que je fais "return".
    Pour récupérer la valeur de l'entry il faut bien que tu passe par "get()" comme tu le fais déjà. Le truc c'est que dans le code que tu me donne il y a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def affich(evt):
        print(globals()["Entree"+str(0)].get()) 
        print(globals()["Entree"+str(i)].get())
    Bien que je ne comprenne pas trop ce que tu veuille faire par là, tu as un i qui n'est pas en paramètre et un paramètre "evt" que tu n'utilise pas. Du coup, si en console tu appel affich(), il s'affichera ce qui est contenu dans Entry0 et ce qu'il y a dans le dernier Entry.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 25
    Par défaut
    Bien que je ne comprenne pas trop ce que tu veuille faire par là, tu as un i qui n'est pas en paramètre et un paramètre "evt" que tu n'utilise pas. Du coup, si en console tu appel affich(), il s'affichera ce qui est contenu dans Entry0 et ce qu'il y a dans le dernier Entry.
    la fonction affich() est activée par l'appui sur la touche RETURN sur une quelconque des zones ENTRY d'ou le paramètre "evt".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        globals()["Entree"+str(i)].bind("<Return>", affich)
    Idéalement, j'aimerais pouvoir passer la valeur du i dans la fonction...
    Mon problème, c'est de savoir, dans affich(), quelle zone ENTRY a provoqué l'action.
    Je veux récupérer cette valeur pour la stocker dans une base de données!!

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 43
    Par défaut
    Bon, en gros tu veux que quand tu modifie le champ d'un Entry, tu puisse récupérer ce champ lors de l’événement <Return>? Tu peux surement te débrouiller avec .widget:

    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: iso-8859-15 -*-
    from tkinter import *
    import tkinter.ttk as ttk
    def affich(evt):
        w = evt.widget
        print w.get()
     
    fenetre = Tk()
    NbrEntry = 6
    NameEntry = []
    for i in range(NbrEntry):
        xn_entree=StringVar()
        xn_entree.set("Entree"+str(i))
     
        globals()["Entree"+str(i)] = Entry(fenetre, bg ="ivory", width =20,justify=CENTER,textvariable=xn_entree, borderwidth=2, relief=RIDGE)
        globals()["Entree"+str(i)].bind("<Return>", affich)
        globals()["Entree"+str(i)].pack()
        NameEntry.append("Entree"+str(i))
    J'espère bien répondre à ta question...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/07/2012, 18h36
  2. Réponses: 0
    Dernier message: 12/12/2009, 16h40
  3. [lablgtk2] comment ajouter des widget dynamiquement?
    Par amiroushka dans le forum Caml
    Réponses: 4
    Dernier message: 06/11/2009, 21h21
  4. Plein écran et réactions des widgets Entry
    Par bdudout dans le forum Tkinter
    Réponses: 8
    Dernier message: 06/10/2009, 20h38
  5. Réponses: 2
    Dernier message: 31/08/2002, 14h00

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