Logiciel python tkinter

Bonjour,
je souhaiterais afficher plusieurs cercles dans un canevas et pouvoir modifier leur remplissage. J'ai une solution en programmation "linéaire" qui fonctionne. J'essaie de la transposer en POO en créant une classe mais la modification du remplissage ne fonctionne pas.
[code]
#==============================================================================
class Lampe (): #-- les lampes s'affichent dans le canevas cnv à créer
def __init__(self , pte, pts):
self.pte=pte #-- Entrée lampe
self.pts=pts #-- Sortie lampe
r=((self.pts.y - self.pte.y)**2 + (self.pts.x - self.pte.x)**2)**0.5/2
mx=(self.pts.x + self.pte.x)/2 #-- abscisse milieu
my=(self.pts.y + self.pte.y)/2 #-- ordonnée milieu
lmp=cnv.create_oval(mx-r , my-r , mx+r , my+r , fill="grey")

def allumer (self):
cnv.itemconfig(self.lmp, fill="red")
[code]
Y a-t-il une solution ?
Cordialement.

Réponses

  • Si tu as une solution qui fonctionne et une qui ne fonctionne pas, il doit être facile de « dichotomer ». As-tu mis des print() à des endroits stratégiques pour vérifier quelles portions de ton nouveau code sont exécutées ?
  • Le code fonctionne (les lampes s'affichent lors de leur déclaration) mais l'accès au remplissage donne le message d'erreur suivant :
    AttributeError: 'Lampe' object has no attribute 'lmp'

    Je ne sais pas comment accéder à cet attribut "fill" dans une classe .
    En programmation linéaire je faisais simplement cnv.itemconfig(lampe_1, fill="red")
    avec lampe_1 = cnv.create_oval(400,35,440,75) par exemple .
  • essaie de remplacer
    lmp=cnv.create_oval(mx-r , my-r , mx+r , my+r , fill="grey")
    
    par
    self.lmp=cnv.create_oval(mx-r , my-r , mx+r , my+r , fill="grey")
    
  • Mais oui , c'est ça qui me manquait et c'est très logique .
    Un grand merci raoul.S pour cette aide aussi rapide que pertinente . Je vais pouvoir continuer mon application .
Connectez-vous ou Inscrivez-vous pour répondre.