Partage
  • Partager sur Facebook
  • Partager sur Twitter

tkinter: liste de boutons

24 décembre 2015 à 11:58:58

Bonjour, j'essaie de faire un mastermind, j'ai créé une liste de bouton qui doivent changer la couleur d'une case, mais ils la mettent toutes de la meme couleur
def setCouleurRond (couleur,canvas):
    listeCercles=canvas.create_oval(50,50,100,100, fill=couleur)
listeCouleur=["blue","red","purple","black","white","orange","yellow","chocolate4","pink","cyan"]
listeBoutonCouleur=[]

for i in range (10):
    listeBoutonCouleur.append(Button(frame2, text=listeCouleur[i], fg=listeCouleur[i],bg="grey",command= lambda :setCouleurRond(listeCouleur[i],canvas),))
listeBoutonCouleur[i].grid(column=0,row=i)
Le problème c'est que i change comme il est dans la boucle et setCouleurRond(listeCouleur[i],canvas) est le même pour tous les boutons à la fin de la boucle
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
24 décembre 2015 à 13:18:26

for ind, color in enumerate(listeCouleur):
    button = Button(...)
    button.grid(...)
    listeBoutonCouleur.append(button)
  • ind est l'indice dans listeCouleur
  • color est la couleur dans listeCouleur
  • Partager sur Facebook
  • Partager sur Twitter
19 novembre 2024 à 9:36:49

bonjour, j'ai a peu près le même problème. j'essaie de créer une application pour lire des musiques mais pour cela je créer un bouton pour chaque musique que je met dans une liste. or au moment d'appeler la musique quand le bouton est cliqué, ça lance seulement la dernière musique.

je tient à préciser que je suis débutant en programmation

paths = str(Path(__file__).parent)

musics = []
for i in (Path(paths + "\\musiques").glob('*.wav')):
    musics.append(i)

musics_boutons = []

def son(a):
    print(a)

for i in musics:
    name = extract_name(str(i))
    musics_boutons.append(Button(window,text=name, font=("Courrier",15) ,command = lambda :son(musics.index(i)) ,width=50,height=1,anchor="w",border=0))



  • Partager sur Facebook
  • Partager sur Twitter
19 novembre 2024 à 11:00:44

@ThailaneBerier-Perus Bonjour, merci de créer votre propre sujet et de ne pas déterrer d'ancien sujet pour une nouvelle question.

Je ferme ce déterrage.

Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Liens conseillés

  • Partager sur Facebook
  • Partager sur Twitter