Salut tout le monde,j'ai un petit problème avec un programme et un coup de main serait vraiment le bienvenu .
Le but est de créer automatiquement des boutons à partir d'une liste, contenant des str(un bouton pour chaque item).
Premièrement je crée un dico, puis grâce à une boucle, je crée autant de boutons qu'il y a d'items dans la liste (chaque bouton a pour texte la str de la liste correspondante),les boutons étant "stockés" dans le dico.
Le problème c'est quand il faut définir une commande pour chaque bouton, je m'explique : ma fenêtre possédant un Entry, je voudrais que chaque fois qu'un bouton soit cliqué, il écrive un texte dans l'Entry(ici, la lettre que je lui ai défini comme "text").
J'ai donc essayé de configurer en série les boutons précédemment créés grâce à un boucle de type "for i in range(x)", définissant pour chaque bouton une commande (écrit()) avec comme "variable passée" (connais pas le terme exact), le texte à écrire.
Cependant, ça a ... merdé(...), la valeur de i étant déjà arrivée à son maximum lorsque l'utilisateur veut cliquer sur un bouton...
Voila le programme en entier(plus clair que mon roman ):
J'ai bien sur pris la liste a au hasard, le but étant de pouvoir créer des boutons à partir de n'importe quelle liste contenant des str.
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 from tkinter import * root = Tk() def ecrit(x): entry.insert(END,x) entry = Entry(root) entry.pack() a = ["a","z","e","r","t","y","u","i","o","p","q","s","d","f","g","h","j","k","l","m","w","x","c","v","b","n","1"] b = len(a) if b%7 == 0: c = b//7 elif b%7 != 0: c = b//7+1 dicf = dict() for i in range(c): dicf[i] = Frame(root,bg = "#" + str(25*i)+ str(25*i)+ str(25*i)) dicf[i].pack() dicb = dict() for i in range(len(a)): for j in range(c): if i>=j*7 and i<(j+1)*7: dicb[i] = Button(dicf[j],text = a[i]) dicb[i].pack(side = LEFT) for item in a: dicb[a.index(item)].config(command = lambda : ecrit(item)) root.mainloop()
D'avance merci pour votre aide.
Partager