Как перемещать canvas_image сверху вниз несколько раз или, по крайней мере, 3 раза в tkinter?

#python #python-3.x #tkinter #tk #tkinter-canvas

#python #python-3.x #tkinter #tk #tkinter-холст

Вопрос:

Я написал код, который отлично работает для перемещения изображения вниз, но я в замешательстве, как снова переместить его в старое положение изображения, которое находится сверху?

 import tkinter as tk

def move_object(canvas, object_id, destination, speed=50):
    dest_x, dest_y = destination
    coords = canvas.coords(object_id)
    current_x = coords[0]
    current_y = coords[1]

    new_x, new_y = current_x, current_y
    delta_x = delta_y = 0
    if current_x < dest_x:
        delta_x = 1
    elif current_x > dest_x:
        delta_x = -1

    if current_y < dest_y:
        delta_y = 1
    elif current_y > dest_y:
        delta_y = -1

    if (delta_x, delta_y) != (0, 0):
        canvas.move(object_id, delta_x, delta_y)

    if (new_x, new_y) != (dest_x, dest_y):
        canvas.after(speed, move_object, canvas, object_id, destination, speed)

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

background = tk.PhotoImage(file="Images/scanner-bar.png")
item1 = canvas.create_image(0,0, image=background, anchor=tk.NW)

move_object(canvas, item1, (0, 180), 2)
move_object(canvas, item1, (0, 0), 2)

root.mainloop()

 

Комментарии:

1. Просто вызовите move_object(canvas, item1, (0, 0), 2) .

2. Нет. Это приведет к тому, что изображение застрянет на оси 0 x.

3. Если изображение перемещается в (0, 180) . Вызов move_object(canvas, item1, (0, 0), 2) вернет изображение обратно (0, 0) .

4. Не могли бы вы скопировать мой код и проверить его на своем компьютере? Добавив move_object(canvas, item1, (0, 0), 2) , вы поймете, как он привязан к оси 0 x.

5. Да, я протестировал ваш код, и он работает нормально. Может быть, вы вызываете его, не дожидаясь полного перемещения изображения.