Jul-10-2019, 08:39 PM
Hi, I spent 2 days trying to solve this little exercice, creating a face with button open or closing his mouth.
I do have 2 questions about this code :
I do have 2 questions about this code :
- I cannot delete the round face to create a closed mouth, line 40 and line 43, python says : AttributeError: 'Button_Can' object has no attribute 'opened_mouth'. How could I make this work ?
- How could I avoid to repeat the circle function on line 17 in the Button_Can Class ?
Thanks for any help that could enlighten my poor coding skills
from tkinter import * class Button_Can(Frame): def __init__(self): Frame.__init__(self) self.larg,self.haut=200,200 self.can=Canvas(self.master,width=self.larg,height=self.haut,bg='ivory') self.can.pack() self.b1=Button(self.master,text='Open it !',command=self.openit) self.b2=Button(self.master,text='Close it !',command=self.closeit) self.b1.pack(side=RIGHT) self.b2.pack(side=LEFT) def openit(self): Face.openMouth(self) def closeit(self): Face.closeMouth(self) def circle(self,x, y, r, coul ='black'): "Draw a circle center x,y radius r " self.can.create_oval(x-r, y-r, x+r, y+r, outline=coul) class Face(): def __init__(self,can): self.can=can "Draw a face" can.delete(ALL) cc =[[100, 100, 80, 'red'],[70, 70, 15, 'blue'], [130, 70, 15, 'blue'],[70, 70, 5, 'black'], [130, 70, 5, 'black'],[44, 115, 20, 'red'], [156, 115, 20, 'red'],[100, 95, 15, 'purple']] i =0 while i < len(cc): el = cc[i] self.circle(el[0], el[1], el[2], el[3]) i += 1 def circle(self,x, y, r, coul ='black'): "Draw a circle center x,y radius r " self.can.create_oval(x-r, y-r, x+r, y+r, outline=coul) def openMouth(self): self.can.delete(self.closed_mouth) self.opened_mouth=self.circle(100, 145, 30, 'purple') def closeMouth(self): self.can.delete(self.opened_mouth) self.closed_mouth=self.can.create_line(80,145,120,145,fill='purple') A=Button_Can() B=Face(A.can)