Bonjour à tous.

Je fais un exercice avec le livre de G.swinnen. J'en suis au chapitre sur la POO et les interfaces graphiques.
Je dois créer une classe Application() qui instancie un canvas, ainsi que deux boutons 'ouvrir' et 'fermer'.

Et une autre classe Visage() qui doit normalement dessiner une tête de bonhomme dans ce canvas
Les boutons 'ouvrir' et 'fermer' doivent servir à dessiner une bouche ouverte ou une bouche fermée.

Le souci: Lord de l’exécution du programme, je me vois signifier que les fonctions liées à chaque bouton ne sont pas définies (je pensais pourtant l'avoir fait)

Je suis débutant en POO, et je me demande si ce n'est pas un problème de position de la fonction dans le script? Ou alors un problème de dialogue entre les classes...

Voici mon script:

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
60
61
62
63
#!/usr/bin/python
# -*- coding: utf8 -*-
 
from tkinter import *
 
class Visage(Canvas):
    def __init__(self, x=20, y=20):
 
    #les caractéristiques de chaque cercle sont placés
    #dans une liste de listes:
        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'], 
            [100, 145, 30, 'purple'], 
            [100, 145, 130, 145, 'purple']]
 
        Canvas.__init__(self)  #importation du constructeur de la classe Canvas.
 
    def figureOpen(self):
        '''dessiner un visage simplifié avec bouche ouverte'''
        self.can.delete(ALL)
        def cercle(self, x, y, r, coul ='black'):    
            """tracé d'un cercle de centre (x,y) et de rayon r"""    
            self.can.create_oval(x-r, y-r, x+r, y+r, outline=coul)
    #On trace tous les cercles à l'aide d'une boucle
        for e in self.cc:
            el = self.cc[e]
            cercle(el[0], el[1], el[2], el[3])
 
    def figureClose(self):
        '''Dessiner un visage simplifié avec bouche fermée'''
        self.can.delete(ALL)
        self.can.create_oval(x-r, y-r, x+r, y+r, outline=coul)
        for e in self.cc:
            if flag == 0:
                el = self.cc[e]
                cercle(el[0], el[1], el[2], el[3])
                if el == self.cc[8]:
                    flag = 1
            elif flag == 1:
                break
        self.can.create_line(self.cc[10[1]], self.cc[10[2]], self.cc[10[3]], self.cc[10[4]], 
            outline=self.cc[10[5]])
 
 
class Application(Frame):
    def __init__(self, larg=400,  long=400):
        Frame.__init__(self)
        self.can = Canvas(height=larg, width=long, bg='grey')
 
        self.bonhomme = Visage()
        self.button1=Button(self, text='ouvrir', command=figureOpen).pack(side=LEFT)
        self.button2=Button(self, text='fermer', command=figureClose).pack(side=RIGHT)
 
#Lancement du programme
 
app = Application()
app.mainloop()
Merci à tous pour votre aide