Bonjour à tous.tes,

Je ne comprends pas bien l'option "command" du widget "Button"

  • Pour appeler ma fonction (qui n'a pas besoin de paramètre) drawline5(), il me suffit de l'indiquer sans les parenthèses.
    Pour appeler ma fonction (qui a besoin d'un paramètre) drawline1(n), elle s'exécute automatiquement au lancement du programme sans attendre que je clique sur le bouton

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
# charge la bibliothèque graphique tkinter
from tkinter import *
 
# Court programme qui dessine les 5 anneaux olympiques dans un rectangle
# de fond blanc (white). Un bouton « Quitter » doit permettre de fermer la fenêtre.
# Modifiez le programme ci-dessus en y ajoutant 5 boutons.
# Chacun de ces boutons provoquera le tracé de chacun des 5 anneaux
 
# --- définition des fonctions gestionnaires d'événements : ---
 
def drawline5():
    global x1, y1, x2, y2, coul
    i = 0
    # "Trace les anneaux olympiques dans le canevas can1"
    while i < 3 :
        can1.create_oval(x1,y1,x2,y2,width=4, outline=coul[i])
        x1, x2 = x1+120, x2+120 # modification des coordonnées horizontales pour l'anneau suivant
        i=i+1
    y1, y2 = y1+50, y2+50 # modification des coordonnées verticales pour les anneaux suivants
    x1, x2 = x1-180, x2-180 # modification des coordonnées horizontales pour les anneaux suivants
    while i < 5 :
        can1.create_oval(x1,y1,x2,y2,width=4, outline=coul[i])
        x1, x2 = x1-120, x2-120 # modification des coordonnées horizontales pour l'anneau suivant
        i=i+1
    x1, y1, x2, y2 = 50 ,50 ,150 , 150 # repositionne les coordonnées de départ des anneaux
 
def drawline1(n):
    global x1, y1, x2, y2, coul
    can1.create_oval(x1,y1,x2,y2,width=4, outline=coul[0])
    # fonction à finaliser
    # ...
 
#------ Programme principal -------
 
# les variables suivantes seront utilisées de manière globale :
coul = ['blue','black','red','green','yellow'] # couleur de contour des anneaux
 
# Création du widget principal ("maître") :
x1, y1, x2, y2 = 50 ,50 ,150 , 150 # coordonnées de départ des anneaux
fen1 = Tk(className='\Anneaux olympiques')
 
# création des widgets "esclaves" :
can1 = Canvas(fen1,bg='white',height=250,width=440)
can1.pack(side=LEFT)
bou1 = Button(fen1,text='           Quitter            ',command=fen1.quit)
bou1.pack(side=BOTTOM)
bou2 = Button(fen1,text='Trace les 5 anneaux',command=drawline5)
bou2.pack()
bou3 = Button(fen1,text='   Trace l\'anneau 1   ',command=drawline1(1))
bou3.pack()
bou4 = Button(fen1,text='   Trace l\'anneau 2   ',command=drawline1(2))
bou4.pack()
bou5 = Button(fen1,text='   Trace l\'anneau 3   ',command=drawline1(3))
bou5.pack()
bou6 = Button(fen1,text='   Trace l\'anneau 4   ',command=drawline1(4))
bou6.pack()
bou7 = Button(fen1,text='   Trace l\'anneau 5   ',command=drawline1(5))
bou7.pack()
 
fen1.mainloop() # démarrage du réceptionnaire d'événements
 
fen1.destroy() # destruction (fermeture) de la fenêtre
Merci pour votre aide.