Un .configure() qui ne marche pas avec l'argument 'image'
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:
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:
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:
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 :cry:]
[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 8O]