Bonjour,
je suis en train de suivre le livre de Swinnen et je bute sur l'exercice 8.17
il faut dans tinker créer un cercle et en bas un bouton. Quand on clique sur le bouton, le cercle avance jusqu’au limite de la fenêtre , et toujours en cliquant sur le même bouton il doit reculer jusqu’à l’autre extrémité de la fenêtre.


voilà le code que j’ai fait

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
from tkinter import *
 
def avance(n, g):
    global x, y, step
    # nouvelles coordonnées :
    x[n] = x[n] + g # deplacement de l'axe des x
    # déplacement du dessin dans le canevas :
    can.coords(bille[n], x[n]-10, y[n]-10, x[n]+10, y[n]+10)
 
    # affichage pour info du x:
    Info.configure(text="Coordonnée x = " + str(x[n]))
 
 
    i = 0
    z = 400 # on part de 400 (limite fenetre) pour le deuxieme while
 
    while i < 400 and x[n] < 390:
        step = +20
        i = i+5
        return step
 
 
    while z >= 50 and x[n] >= 50:
        step = -20
        z = z-5
        return step
 
 
def go():
    avance(0, step)
 
 
bille = [0]      # liste servant à mémoriser les références du cercle
x = [50]     # X de départ
y = [100]    # y de départ
step = 0   # "pas" de déplacement initial
 
# Construction de la fenêtre :
fen = Tk()
fen.title("avance quand on clique jusqu'à la limite de la fenêtre et revient")
 
 
Info = Label(fen) # pour afficher l'info du x
Info.grid(row=3, column=0)
 
# Canvas :
can = Canvas(fen, bg="white", width=400, height=200)
can.grid(row=2, column=0, columnspan=2)
bille[0] = can.create_oval(x[0]-10, y[0]-10, x[0]+10, y[0]+10,
                           fill="blue")
 
# bouton avance :
f = Frame(fen)
f.grid(row=4, column=0, sticky=W, padx=10)
 
Button(f, text="Go", fg='blue', command=go).pack(side=LEFT)
 
fen.mainloop()




dans la deuxième boucle, ça recule d’un pas, mais du coup il se retrouve dans les conditions de la première boucle et ça avance au lieu de reculer (etc.)
j’essaye de me cantonner à une solution avec while ( on n’a pas vu encore for etc..)


merci de votre aide et suggestions