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

Python Discussion :

Appeler un tuple dont le nom est dans une variable


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Gérant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut Appeler un tuple dont le nom est dans une variable
    Bonjour,
    En souhaitant que mon vocabulaire soit suffisamment précis...
    J'ai généré une série de boutons avec Tkinter, avec une boucle 'for'
    Chaque bouton possède son nom propre, tiré d'un tuple
    En parallèle de ceci, j'ai autant de tuples que j'ai de boutons ; chaque tuple comporte le même nom que son bouton correspondant
    Une fonction 'def' me renvoi le nom du bouton sur lequel je viens de clicker, pour le stocker dans une variable, nommé 'choix', qui est donc de type 'str'
    J'aimerai ensuite afficher les éléments du tuple correspondant au bouton clické.... aussi simple que cela! Et pourtant...
    Si j'appelle choix[i] dans une boucle 'for i' j'obtiens 'l','i','s','t','e','x' qui est le nom du bouton 'x' sur lequel je viens d'appuyer...
    Comment procéder?
    Merci beaucoup pour votre aide

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    Le résultat que tu obtiens est directement lié à la façon dont tu t'y prend.

    Sans voir ton code, difficile d'en dire plus.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Gérant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut
    Merci pour votre message
    Voici mon bout de programme, épuré au maximum

    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
     
    from Tkinter import *
     
    fenetre = Tk()
    fenetre.geometry('400x200+20+500')
     
    famille=('fam1','fam2','fam3')
    fam1=('type1-1','type1-2','type1-3')
    fam2=('type2-1','type2-2','type2-3')
    fam3=('type3-1','type3-2','type3-3')
     
    def choixFamille(choix):
        print "choix:", choix
        afficherCoupe(choix)
     
    def accueil():
        i=0
        for choix in famille:
            i=i+1
            b=Button(fenetre, text=choix
                     , command=lambda m=choix: choixFamille(m))
            b.grid(row=i, column=1)
     
     
    def afficherCoupe(choix):
        b=Button(fenetre, text=choix)
        b.grid(row=2, column=1)
        for p in range (3):
            print(choix[p])                                   #c'est ici que se situe mon problème (print pour tester
            l=Button(fenetre,text=choix[p])          #j'aimerai afficher ici les élements de fam1, 2 ou 3
            l.grid(row=p+1, column=2)
     
    accueil()
     
    fenetre.mainloop()
    merci pour votre aide

  4. #4
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par digiboybx Voir le message
    Merci pour votre message
    Voici mon bout de programme, épuré au maximum

    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
     
    from Tkinter import *
     
    fenetre = Tk()
    fenetre.geometry('400x200+20+500')
     
    famille=('fam1','fam2','fam3')
    fam1=('type1-1','type1-2','type1-3')
    fam2=('type2-1','type2-2','type2-3')
    fam3=('type3-1','type3-2','type3-3')
     
    def choixFamille(choix):
        print "choix:", choix
        afficherCoupe(choix)
     
    def accueil():
        i=0
        for choix in famille:
            i=i+1
            b=Button(fenetre, text=choix
                     , command=lambda m=choix: choixFamille(m))
            b.grid(row=i, column=1)
     
     
    def afficherCoupe(choix):
        b=Button(fenetre, text=choix)
        b.grid(row=2, column=1)
        for p in range (3):
            print(choix[p])                                   #c'est ici que se situe mon problème (print pour tester
            l=Button(fenetre,text=choix[p])          #j'aimerai afficher ici les élements de fam1, 2 ou 3
            l.grid(row=p+1, column=2)
     
    accueil()
     
    fenetre.mainloop()
    merci pour votre aide
    Bonjour,
    Ici, il y a plusieurs problèmes.
    En premier, ce n'est pas simple de récupérer le nom d'une variable. Dans le code donné, il y a mélange entre les noms de variables et leurs contenus.
    D'autre part, en ligne 26 et 27, je ne comprends pas l'intérêt de créer un bouton par-dessus un bouton existant.
    Voilà une solution:
    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
    from tkinter import *
     
    fenetre = Tk()
    fenetre.geometry('400x200+20+500')
     
    fam1=('type1-1','type1-2','type1-3')
    fam2=('type2-1','type2-2','type2-3')
    fam3=('type3-1','type3-2','type3-3')
    famille={"fam1":fam1, "fam2":fam2, "fam3":fam3}
     
    def choixFamille(choix):
        print("choix:", choix)
        afficherCoupe(choix)
     
    def accueil():
        i=0
        for choix in sorted(famille.keys()):
            i=i+1
            b=Button(fenetre, text=choix
                     , command=lambda m=famille[choix]: choixFamille(m))
            b.grid(row=i, column=1)
     
     
    def afficherCoupe(choix):
        #b=Button(fenetre, text=choix)
        #b.grid(row=2, column=1)
        for p in range (3):
            print(choix[p])                                   #c'est ici que se situe mon problème (print pour tester
            l=Button(fenetre,text=choix[p])          #j'aimerai afficher ici les élements de fam1, 2 ou 3
            l.grid(row=p+1, column=2)
     
    accueil()
     
    fenetre.mainloop()
    La solution que j'utilise ici est de conserver le nom des variables liées au contenu par un dictionnaire.
    Étant donné que le dictionnaire n'utilise pas d'ordre, il peut-être nécessaire de trier les clefs pour retrouver cet ordre.
    C'est en Python3, il faut donc remplacer "tkinter" par "Tkinter" pour que cela passe en Python2.

    Clodion

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Gérant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut
    Un grand merci Clodion

    Il restait effectivement un peu de bazar oublié aux lignes 26-27

    En plus de fonctionner, cette solution est simple, qui plus est j'arrive à la comprendre

    Merci encore, je continue ma route

    PS: il s'agit ici de mon premier sujet...
    Cependant, nombre de soucis rencontrés tout au long de mon apprentissage ont trouvé réponse ici, grace à des passionés comme vous qui prennent de leur temps pour partager leurs connaissances... Mille mercis
    I'll (certainely) be back

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

Discussions similaires

  1. [XL-2010] Lancer un formulaire dont le nom est dans une variable
    Par Denis la Malice dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/03/2013, 14h13
  2. Réponses: 3
    Dernier message: 25/06/2012, 12h55
  3. Réponses: 3
    Dernier message: 05/02/2007, 09h41
  4. Réponses: 3
    Dernier message: 05/10/2006, 18h52
  5. Appel de methode dont le nom est dans une variable
    Par osopardo dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 20h56

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