Jul-11-2019, 01:57 AM
The easiest way to control or work with objects in tkinter is to use tags.
I don't see the need for 2 classes here
I don't see the need for 2 classes here
from tkinter import Tk,Frame,Canvas,Button,RIGHT,LEFT class Button_Can(Frame): def __init__(self): Frame.__init__(self) self.pack(expand='yes',fill='both') 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.openMouth) self.b2=Button(self.master,text='Close it !',command=self.closeMouth) self.b3=Button(self.master,text='delete it!',command=self.delete_mouth) self.b1.pack(side=RIGHT) self.b2.pack(side=LEFT) self.b3.pack(side='bottom') self.setup() def setup(self): 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('bouche') self.opened_mouth= self.can.create_oval(70, 115, 130, 175, outline='purple',tag='bouche') def closeMouth(self): self.can.delete('bouche') self.closed_mouth=self.can.create_line(80,145,120,145, fill='purple', tag='bouche') def delete_mouth(self): self.can.delete('bouche') if __name__ == '__main__': root = Tk() root.title('la visage') A=Button_Can() root.mainloop()