Bonjour ,
Je suis entrain de programmer un mini jeu (style Othello) Qui inclus notamment un éditeur de terrain . Le problème se situe au niveau des boutons de commandes , le voici :
J'ai 4 types de cases différentes , chacune sont représentées par un chiffre (0,1,2,3) et caractérisées dans l'interface par une image .
J'affiche les images qui doivent avoir la particularités d'être cliquables , pour cela j'ai créee une petite classe :
Ensuite je souhaite afficher l'image qui viens d'être cliquée (l'image sélectionnée en bref) . Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class BoutonImg(Button): def __init__(self,master,imag,action=None,color="white"): Button.__init__(self,master,bd=0,command=action) self.img=ImageTk.PhotoImage(Image.open(imag)) self.configure(image=self.img,bg=color)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #Ici ce sont les boutons qui permettent de faire les actions sur les terrains BoutonImg(self.sidebar,THEME+'/green.png',lambda:self.setvar(2,THEME+'/green.png')).grid(row=0,column=0) BoutonImg(self.sidebar,THEME+'/red.png',lambda:self.setvar(3,THEME+'/red.png')).grid(row=1,column=0) BoutonImg(self.sidebar,THEME+'/none.png',lambda:self.setvar(0,THEME+'/none.png')).grid(row=2,column=0) BoutonImg(self.sidebar,THEME+'/black.png',lambda:self.setvar(1,THEME+'/black.png')).grid(row=3,column=0) Label(self.sidebar,text="Case sélectionée: ",bg="#F7F555").grid(row=4,sticky=W) self.current=BoutonImg(self.sidebar,THEME+'/black.png',lambda:self.setvar(1)) self.current.grid(row=5,column=0) BoutonImg(self.sidebar,THEME+'/valider.png',self.validerTerrain).grid(row=6,column=0,sticky=S)
et donc pour mettre à jour la case sélectionnée à la fait de ma méthode setvar() j'appel la methode update() que voici :
Et enfin voici le PROBLEME : Tout fonctionne mis à part lorsque que je clique sur une case la case sélectionné disparait et n'affiche aucune autre image , et le plus bizzard (c'est ce qui m'inquiéte , si je rajoute dans update() et dans le configure ', bg="red"' (par exemple) Alors lorsque je clique sur une case la case sélectionné devient bien toute rouge ! J'aimerais savoir comment résoudre ce problème sachant que le chemin est bon et le code précédent marche .... Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 def update(self,chemin): '''permet de mettre à jour la case sélectionnée''' self.current.configure(image=ImageTk.PhotoImage(Image.open(chemin))[PS1 : la case sélectionnée n'a pas besoin d'être un bouton (c'est juste une affichette pour l'utilisateur) Du coup j'ai aussi essayé de définir self.current comme une image et pas un bouton-image: le résultat est le même
]
[PS2: Si ça peut aider , j'ai testé voir d'où ça venez et en remplacent chemin dans self.current .configure(.......chemin...) Ca ne m'affiche problématiquement pas l'image mais lorsque je met un fond (bg=...) Ca prend bien la taille en pixel de l'image à ouvrir ... L'image est bien mise à jour mais ne s'affiche pas]
Partager