Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Problème dictionnaire

Problème dictionnaire

Remonter à Forum général Python
  • Problème dictionnaire

    Envoyé par hugovdutreize le 10 Juin 2012 à 11:39
    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...
    • Re: Problème dictionnaire

      Envoyé par jacko le 11 Juin 2012 à 14:03
      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.
    • Re: Problème dictionnaire

      Envoyé par hugovdutreize le 13 Juin 2012 à 07:21
      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 :D

      Bonne continuation.
Rendu par Ploneboard