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 :

TK Inter, comment inserer une variable dans le nom d'une autre variable?


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut TK Inter, comment inserer une variable dans le nom d'une autre variable?
    Bonjour à tout le monde,

    Le titre n'est pas très explicite, mais le problème est tout simple:

    J'ai un code qui ressemble à ça, en python avec TK Inter:

    Image1 = PhotoImage(file = "Boutons/1.gif")
    Image2 = PhotoImage(file = "Boutons/2.gif")
    Image3 = PhotoImage(file = "Boutons/3.gif")
    Image4 = PhotoImage(file = "Boutons/4.gif")
    Image5 = PhotoImage(file = "Boutons/5.gif")
    Image6 = PhotoImage(file = "Boutons/6.gif")
    ...



    J'ai besoin d'une cinquantaine d'images comme ça...
    Évidemment, je voudrait rentrer tout ça dans une boucle, mais je ne sais pas comment faire, pour que le compteur soit intégré dans le nom des variables ("ImagesX" et "Boutons/X").

    Il me faudrait quelque chose du genre:

    for i in range (1,51):
    Image{i} = PhotoImage(file = "Boutons/{i}.gif")


    Je met les accolades en exemple, je ne sais pas comment pourrait être la syntaxe. D'ailleurs il est aussi possible qu'il n'en existe pas et qu'il faille utiliser une autre méthode...


    Bref, je m'en remet à vous, merci pour votre aide et bonne journée.

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Si tu les mets dans une liste, tu pourras les retrouver avec leur index.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    images = [] # ou bien [None]
    for i in range(1, 51):
        images.append(PhotoImage(file = "Boutons/%s.gif" % i)
    Si tu as absolument besoin que l'index de l'image soit le même que le nom du fichier .gif alors commence ta liste avec None comme je l'ai mis en commentaire.

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup, ça marche sans problème

    Par contre j'ai un autre problème...

    Est-il possible d'utiliser "%s" dans ce cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    button1 = Button(Colonne1, image=Image[1])
    button2 = Button(Colonne2, image=Image[2])
    button3 = Button(Colonne3, image=Image[3])
    button4 = Button(Colonne1, image=Image[4])
    button5 = Button(Colonne2, image=Image[5])
    button6 = Button(Colonne3, image=Image[6])
    il faurdrait que les noms "buttonX" et "ColonneX" soit variables.

    J'ai essayé d'apater ça avec ce que tu m'a donné, ce qui me donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Image=[None]
    button=[None]
    for i in range (1,16):
        Image.append(PhotoImage(file="Boutons/%s.gif" % i))
        button.append(Button(Colonne"%s" % i//3, image=Image[i]))

    Evidemment, la partie Colonne"%s" % i//3, c'est n'importe quoi, puisque ici, Colonne n'est pas une str...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    boutons=[]
    for i in range(1,6+1) :
       if i%3==1 : boutons.append(Button(Colonne1),Image[i])
       if i%3==2 : boutons.append(Button(Colonne2),Image[i])
       if i%3==0 : boutons.append(Button(Colonne3),Image[i])
       #si on avait beaucoup plus de colonnes, on pourrait tricher :
       colonne=i%3
       if colonne==0 : colonne=3
       exec("boutons.append(Button(Colonne"+str(colonne)+"),Image["+str(i)+"])")
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    En ce moment il y a une épidémie avec le mot clé exec et global, je sais pas d'où ça vient ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> colonnes = ["colonne1", "colonne2", "colonne3"]
    >>> for i in range(1, 16):
    ...     print(colonnes[(i-1)%3])
    ... 
    colonne1
    colonne2
    colonne3
    ...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    En ce moment il y a une épidémie avec le mot clé exec et global, je sais pas d'où ça vient ?
    Il y a un problème avec exec et global ?
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par stalacta Voir le message
    Il y a un problème avec exec et global ?
    Il n'y a pas de problème avec "exec".

    Mais écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         exec("boutons.append(Button(Colonne"+str(colonne)+"),Image["+str(i)+"])")
    équivaut à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         boutons.append(Button(globals()['Colonne%d' % i],Image[i])
    Pourquoi écrire une instruction sous la forme d'une chaîne de caractères puis l'exécuter via exec alors qu'on peut l'écrire sous une forme directement "interprétable"?

    Pourquoi polluer l'espace globals() avec les variables colonne1, colonne2, colonne3 alors qu'on peut créer une liste ou un dict "colonnes" et écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         boutons.append(Button(colonnes[i],Image[i])
    Ces transformations coûtent autant d'appels de méthodes/fonctions et ce style n'améliore pas la lisibilité du code.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Interface graphique dans PyCharm
    Bonjour,

    Je souhaiterai savoir si on peut utiliser TKinter dans PyCharm ou y a t il un équivalent dans PyCharm?

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Il y a un problème avec exec et global ?
    wiztricks a tout dit et son dernier code est exactement la conclusion que je souhaitais... C'est quand même bien plus propre que d'évaluer des chaînes de caractères.

    @blackyiun,

    Peux-tu me donner le rapport entre le topic de Inariuss et ton problème ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Tout ça de réponses?

    Je vais tester, je vous dirais si ça marche.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/10/2013, 12h01
  2. [EG] Macro variable dans le nom d'une table
    Par asirier dans le forum Outils BI
    Réponses: 2
    Dernier message: 02/07/2013, 15h44
  3. Macro variable dans le nom d'une macro
    Par foxrol dans le forum Macro
    Réponses: 3
    Dernier message: 28/02/2012, 14h23
  4. Réponses: 3
    Dernier message: 29/11/2011, 16h34
  5. [AC-2003] Variables dans le nom d'une image
    Par Tatas dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/10/2009, 20h25

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