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 :

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)
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
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 :

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))
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 [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 ]