Problème dictionnaire
Remonter à Forum général Python
-
Voilà mon problème : pour un jeu de puissance 4 que j'ai commencé, j'ai voulu mémoriser chaque trou dans un dictionnaire avec ses coordonnées comme clé.self.places = {}
for x in range(15, 210, 30):
for y in range(45, 210, 30):
self.places[(x, y)] = Place(self.can, x, y)
Place est la classe qui crée un cercle avec des paramètres, comme un Place.cercle qui est le dessin du cercle avec tkinter.
Mais quand je veux utiliser les valeurs du dictionnaire avec :coul_rond = self.places[(x, y)].cercle['fill']
Mais ça ne fonctionne pas, et l'erreur qui s'affiche est : TypeError: 'int' object is not subscriptable
svp aidez-moi à trouver une variante...-
Bonjour,
Votre dictionnaire n'y est pour rien, ce que vous avez fait est tout à fait correct.
On ne connait pas le reste de votre code, mais j'ai l'intuition que votre pb vient de ceci :
cercle n'est-il pas un item dans le canvas ? Il faut savoir que les items de canvas ne sont pas des widgets. Ils sont gérés par le canvas et référencés par un identifiant qui est un simple entier.
Le constructeur de Place() doit comporter une instruction :
self.cercle=can.create_oval(....)
Dans ce cas, self.cercle n'est pas un widget (c-à-d un objet au sens Python) mais un simple entier -> d'où le message d'erreur "'int' object is not subscriptable".
Pour agir sur les items d'un canvas, il faut utiliser :
can.itemconfigure()
et
can.itemcget()
Dans votre exemple :
coul_rond=can.itemcget(self.places[(x,y)].cercle,"fill" )
Mais peut-être ne connaissez-vous pas le canvas à ce moment-là ? Il faudrait alors le stocker dans l'objet Place. On aurait alors :
place=self.places[(x,y)]
coul_rond=place.can.itemcget(place.cercle,"fill" )
Bonne continuation. -
Bonjour et merci beaucoup !
J'avais déjà connu un problème similaire (et je l'avais résolu), mais je ne m'en rappelais pas (et ça m'énervais vraiment)... Votre réponse est vraiment parfaite et bien détaillée. Et merci d'avoir répondu rapidement
Bonne continuation.
-
Rendu par Ploneboard
