Нажмите на кнопку и перейдите к пределу окна в Tinker.

avatar
Zembla
1 июля 2021 в 17:57
46
1
0

я пытаюсь выучить Python по книге. Я пытаюсь сделать упражнение с tinker. Нажмите на кнопку и перейдите к границе окна. Затем всегда, нажимая на ту же кнопку, перемещайте круг на другую сторону окна. Спасибо за помощь.

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 
             
    if x[n] >= 50:
        while i <= 400:
            step = +20
            i = i+5
            
    if x[n] >= 400:
        step = -20
        i = i-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()

проблема в том, что когда шарик достигает предела (первый цикл while) при запуске второго цикла, он возвращается к условиям первого.

извините за мой английский

спасибо за помощь

Источник

Ответы (1)

avatar
Zembla
3 июля 2021 в 08:32
0

Я решил свою проблему. вот мое решение

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   
    
    if 5 >= x[n] < 400:  # 5 superieur ou egale à x et x inferieur à 400 , execute la ligne suivante
        step=+20
        return step
    if 5 <= x[n] >= 400: # 5 inferieur ou egale à x et x superieur ou egale à 400 , execute la ligne suivante    
        step = -20
        return step
        # x egale 50 execute le premier if..

def go():
    avance(0, step)


step = 0 # variable pour le pas d'avancement
bille = [0]      # liste servant à mémoriser les références du cercle
x = [5]     # X de départ
y = [100]    # y de départ
  # "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()