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 :

Problème avec un boucle créant des boutons radio avec image et commande lambda: [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut Problème avec un boucle créant des boutons radio avec image et commande lambda:
    Bonjour,

    Je fais une boucle qui crée 3 boutons radios (sans indicateurs) avec 3 images (au lieu du texte) et une commande = lambda: fonction(nom du fichier image)
    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
     
     
    from tkinter import *    
     
    def changeTuiles(file):
        print(file)
     
     
     
    fenetre=Tk()
     
    controlVar = StringVar()
    controlVar.set("Tuil0")
    imgTuil=[]
    for i in range(3):
        fichier="TuilSmall-"+str(i)+".png"
        imgTuil.append(PhotoImage(file=fichier))
        Radiobutton(fenetre, image = imgTuil[i], indicatoron=0, variable = controlVar, value = "Tuil"+str(i), command=lambda: changeTuiles(fichier) ).grid(row=i, column=1, padx=5)
     
    fenetre.mainloop()
    la création des boutons radio est OK et ils ont bien une image différente dessus (TuilSmall-0.png, TuilSmall-1.png, TuilSmall-2.png Nom : TuilSmall-0.png
Affichages : 168
Taille : 2,6 KoNom : TuilSmall-1.png
Affichages : 183
Taille : 2,6 KoNom : TuilSmall-2.png
Affichages : 163
Taille : 2,5 Ko),
    le grid() et ok aussi. La plus part des actions indexées par les valeurs de i de la boucle semblent bien se passer....
    sauf qu'il doit y avoir un truc que j’écris mal car:

    Quelque soit le bouton radio sur lequel on clique, la fonction changeTuile(file) imprime toujours " TuilSmall-2.png "

    Alors que je m'attendais à avoir le nom du fichier qui est sur le bouton cliqué.
    Où est mon erreur svp?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Jma06 Voir le message
    Où est mon erreur svp?
    Si vous écrivez une boucle for du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(10):
         pass
    print(i)
    à la sortie de la boucle i vaut 9 et vous trouvez çà normal.
    Donc si on complique un peu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def f(x):
    ...     print(x)
    ...
    >>> g = []
    >>> for i in range(3):
    ...     g.append(lambda: f(i))
    ...
    >>> g[0]()
    2
    le i sera celui de la dernière itération.

    Donc la question est "où stocker la valeur courante de i"? Et la réponse est dans les paramètres d'appels via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> for i in range(3):
    ...     g.append(lambda i=i: f(i))
    ...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut remarquable
    Bonjour wiztricks et merci

    Si je peux me permettre un peu de brosse à reluire:
    Je ne sais pas ce qui est le plus remarquable vous concernant.
    Est ce la qualité de vos explications, le temps que vous offrez pour expliquer, la rapidité de vos réponses..?
    Ou d'imaginer que vous avez du dire et redire ce genre d'explication, ces 12 dernières années, sans vous décourager de continuer de le faire aussi bien.
    Pour tout ça

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Jma06 Voir le message
    Je ne sais pas ce qui est le plus remarquable vous concernant.
    Est ce la qualité de vos explications, le temps que vous offrez pour expliquer, la rapidité de vos réponses..?
    La qualité de mes réponses dépend de la qualité de la description du problème et du code que vous avez écrit: félicitations!

    Si je prends un peu de temps pour y répondre, c'est pour que çà puisse servir à d'autres: le sujet de la discussion n'est pas "à l'aide" mais décrit a peu près le problème, la description du problème et le code qui le reproduit permettent de comprendre ce qu'il se passe... et on peut y trouver une réponse qui demande de fonctionner son cerveau pour en profiter plutôt qu'une solution à emporter et à conserver religieusement dans un coin parce que si çà marche, on n'y comprend rien.

    C'est l'esprit original des forums de DVP où on partage, et on progresse tous ensemble.

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

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

Discussions similaires

  1. Select activable avec des boutons radio (IE :S)
    Par Fabthebug dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/09/2009, 15h49
  2. Récupération d'information avec des boutons radio
    Par fred19732 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/05/2009, 20h23
  3. Problème avec des Boutons Radio
    Par Spinoza23 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/02/2007, 13h59
  4. Boucle sur des boutons radios
    Par jmarey dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/05/2006, 11h03
  5. [Debutant] Pb avec récupération valeurs des boutons radio
    Par Jibees dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/03/2006, 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