Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec les Boutons de TKinter & les boucles

Si pas au bon endroit merci de m'en informer =)

Sujet résolu
    21 janvier 2020 à 20:14:31

    Bonjour,

    Première fois que j'utilise un forum, si je n'écris pas au bon endroit corriger moi (sans m'insulter se serait gentil :)).

    Voila mon problème :

    Je souhaite créer un programme utilisant une liste de noms d'élèves et qu'il me crée un bouton par nom d'élève et que quand on clique sur celui-ci, il lance une fonction qui va ajouter 1 point au compteur de l'élève. Petit bémol : lorsque je clique sur n'importe quel bouton, il ajoute un point au dernier élève de la liste et cela devient vite problématique... Pourtant, les boutons crées par la boucle on pour commande : command:lambda: add_point(student) 

    la fonction add_point():

    le dictionnaire :

    Merci de me répondre si vous avez une idée (ou la moindre piste je désespère :'()                              Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2020 à 21:19:11

      Place ton code Python non pas avec des copies d'écran mais dans les balises du forum prévues à cet effet.

      Tu rencontres un problème relativement courant, plusieurs approches sont possibles mais vu ce que tu as écrit, le plus simple est d'utiliser l'astuce des paramètres nommés student=student comme expliqué dans cet ancien message (ligne 59).

      -
      Edité par PascalOrtiz 21 janvier 2020 à 21:20:19

      • Partager sur Facebook
      • Partager sur Twitter
        22 janvier 2020 à 17:33:33

        Merci pour ta réponse,

        je m'excuse pour les screens je ne savais pas et malheureusement la méthode que tu me décrit je suis allé la voir et j'ai tenté de l' appliquer à mon programme mais dans ma boucle for, student n'est pas un entier mais une chaîne de caractère et utiliser la commande index n'est pas possible vu que les noms des élèves sont stockés dans un dictionnaire et que celui-ci ne fonctionne pas avec des index. J'ai réussi à contourner le problème d'index en créant une liste temporaire stockant les noms d'étudiants pour les réutiliser, mais cela ne résout pas mon problème car les boutons pour je-ne-sais-quelle raison ont tous le même argument dans la fonction de la commande pourtant leur texte possède la même variable mais celui-ci affiche correctement des noms différents : 

        # les boutons
            button_list = [0]*len(students_list.keys())
            student_list_temp = []
            turn_row = 0
            turn_column = 0
            turn_command = 0
        
            for student in students_list:
                student_list_temp.append(student)
                turn_row += 1
                button_list[turn_command] = Button(frame1, text=student, bg='white', fg='#232E3C', command=lambda: add_point(student))
                button_list[student_list_temp.index(student)].grid(column=turn_column, row=turn_row)
                if turn_row == 10:
                    turn_row = 0
                    turn_column += 1
                turn_command += 1
            print(button_list)
        • Partager sur Facebook
        • Partager sur Twitter
          22 janvier 2020 à 18:32:54

          As-tu essayé ce que je t'ai indiqué :

          Button(frame1, text=student, bg='white', fg='#232E3C', command=lambda student=student: add_point(student))

          ?

          Cette astuce fait que ta fonction de rappel du bouton courant dispose du student courant (à cause du paramètre par défaut) et non pas du dernier déclaré lorsque l'astuce n'est pas utilisée.

          Il est difficile de te donner une réponse précise puisque tu ne donnes qu'une partie du code. Si ça ne marche pas, le mieux serait que tu postes un code complet et aussi simplifié que possible et présentant le problème.

          • Partager sur Facebook
          • Partager sur Twitter
            22 janvier 2020 à 21:05:15

            J´essaierai avec ces nouvelles informations demain, si le problème persiste je suivrais vos conseils en envoyant le code complet.
            • Partager sur Facebook
            • Partager sur Twitter
              23 janvier 2020 à 18:58:25

              Bonsoir, 

              Merci pour ton aide qui m'a été précieuse, ta solution était effectivement la bonne. :)

              • Partager sur Facebook
              • Partager sur Twitter

              Problème avec les Boutons de TKinter & les boucles

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown