Bonjour,
Sur l'exercice 13.21 du Swinnen (visage dans une frame qui alterne bouche ouverte/fermée) je n'arrive pas à effacer la bouche "precedente" lors de l'appel de la méthode ouvrir ou fermer.
Merci pour votre aide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#exercice13.21
 
from tkinter import *
 
def cercle(can,x, y, r, coul ='black'):
    "tracé d'un cercle de centre (x,y) et de rayon r"
    can.create_oval(x-r, y-r, x+r, y+r, outline=coul)
 
 
class Application(Frame):
    def __init__(self):
        "Constructeur de la fenetre principale"
        #construction de widget parent
        Frame.__init__(self)  # appel au constructeur de la classe parente
        self.can = Canvas(self,width=400,height=400) #appel canvas
        self.can.pack()
        self.vis = Visage(self.can)  #appel visage
        Button(self, text="ouvrir", command=self.vis.ouvrir).pack()
        Button(self, text="fermer", command=self.vis.fermer).pack()
        self.pack()
 
 
 
class Visage(object):
    def __init__(self,canev):
        "dessin d'un visage dans un canevas <canev>"
        self.canev = canev
        cc =[[100, 100, 80, 'red'], # visage
        [70, 70, 15, 'blue'], # yeux
        [130, 70, 15, 'blue'],
        [70, 70, 5, 'black'],
        [130, 70, 5, 'black'],
        [44, 115, 20, 'red'], # joues
        [156, 115, 20, 'red'],
        [100, 95, 15, 'purple']]# nez
        self.ouvrir()
 
 
        # on trace tous les cercles à l'aide d'une boucle :
        i =0
        while i < len(cc): # parcours de la liste
            el = cc[i] # chaque élément est lui-même une liste
            cercle(self.canev,el[0], el[1], el[2], el[3])
            i += 1
 
    def ouvrir(self):
        "ouverture de la bouche"
        self.canev.delete(self.fermer)   #effacement fermer
        self.ouvrir = cercle(self.canev,100, 145, 30, 'purple') #dessin ouvrir
 
 
    def fermer(self):
        "fermeture de la bouche"
        self.canev.delete(self.ouvrir) #effacement ouvrir
        self.fermer  = self.canev.create_line(70, 150, 130,150) #dessin fermer
 
 
app=Application()
app.mainloop()