Bonjour

Me revoilà....encore perdue dans tkinter.
Le 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
64
65
66
67
68
69
70
 
from tkinter import*
 
def cercle(can,x,y,r,coul) :
    "dessin d'un cercle de rayon r en (x,y) dans le canevas can"
    can.create_oval(x-r,y-r,x+r,y+r,fill=coul)
 
class Application(Tk) :
    def __init__(self) :
        Tk.__init__(self)    # constructeur de la classe parente
        self.can = Canvas(self,width=475,height=130,bg='white')
        self.can.pack(side=TOP,padx=5,pady=5)
        Button(self,text="Train",command=self.dessine).pack(side=LEFT)
        Button(self,text='Hello',command=self.coucou).pack(side=LEFT)
        Button(self,text="Allumer",command=self.lumiere).pack(side=LEFT)
 
    def dessine(self) :
        "instanciation de 4 wagons dans le canevas"
        self.w1 = Wagon(self.can,10,30,'light salmon')
        self.w2 = Wagon(self.can,130,30,'SlateBlue1')
        self.w3 = Wagon(self.can,250,30,'pale green')
        self.w4 = Wagon(self.can,370,30,'DarkGoldenrod3')
 
    def coucou(self) :
        "apparition de personnages dans certaines fenêtres"
        self.w1.perso(3)     # 1er wagon, 3ème fenêtre
        self.w3.perso(1)     # 3ème wagon, 1ère fenêtre
        self.w3.perso(2)     # 3ème wagon, 2ème fenêtre
        self.w4.perso(1)     # 4ème wagon, 1ère fenêtre
 
    def lumiere(self) :
        "lumière !"
        self.w1.allumer()
        self.w3.allumer()
        self.w4.allumer()
 
 
class Wagon(object) :
    def __init__(self,canev,x,y,couleur) :
        "dessin d'un petit wagon en (x,y) dans le canevas 'canev'"
        # mémorisation des paramètres dans des variables d'instance :
        self.canev,self.x,self.y,self.couleur = canev,x,y,couleur
        # rectangle de base : 95 x 60 pixels :
        canev.create_rectangle(x,y,x+95,y+60,fill = couleur)
        # 3 fenêtres de 25x40 pixels, écartées de 5 pixels :
        self.fen = []
        for xf in range(x+5,x+90,30) :
            self.fen.append(canev.create_rectangle(xf,y+5,xf+25,y+40,fill='black'))
        cercle(canev,x+18,y+73,12,"grey56")
        cercle(canev,x+77,y+73,12,"grey56")
 
    def perso(self,fen) :
        "apparition d'un petit personnage à la fenêtre 'fen'"
        # calcul des coordonnées du centre de chaque fenêtre :
        xf = self.x + fen*30 - 12
        yf = self.y + 25
        cercle(self.canev,xf,yf,10,'pink')    # visage
        cercle(self.canev,xf-5,yf-3,2,'black')  # oeil gauche
        cercle(self.canev,xf+5,yf-3,2,'black')  # oeil droit
        cercle(self.canev,xf,yf+5,3,'red')    # bouche
 
    def allumer(self) :
        """permet d'allumer la lumière dans les wagons, en teintant les fenêtres
en jaune"""
        for fen in self.fen :
            self.canev.itemconfigure(fen,fill='yellow')
 
 
app = Application()
app.mainloop()
J'ai donc ce code (qui n'est pas de moi, fourni par l'auteur de l'exercice), et je dois le modifier pour qu'on puisse cliquer sur les boutons "Allumer" et "Hello" sans provoquer d'erreur.
Je suis à peu près certaine que c'est pas très compliqué, et même probablement à ma portée dans l'absolu, mais je ne suis pas sûre de bien comprendre le code fourni.
De toute façon, le simple fait d'être dans tkinter paralyse mes neurones.
Donc je ne sais pas comment m'y prendre.
Est-ce qu'il est possible de mettre une condition à la commande d'un bouton ? Par exemple si tant que le bouton "train" n'a pas été activé, les boutons "Allumer" et "Hello" resteront en grisés, et ne fonctionneraient pas.
Si oui comment on fait une telle chose ?


Désolée pour le roman. Et mon niveau