1
2つの画像を次々と移動しようとしていますが、両方の画像が同時に動き始めます。基本的には、Image1が目的地に到着するまで待ってから、Image2が動くようにします。ここに私のコードは順次キャンバスの項目を移動するにはTkinter画像を次々に移動する
import tkinter as tk
from PIL import ImageTk
from PIL import Image
import time
class gui(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.canvas = tk.Canvas(parent, bg="blue", highlightthickness=0)
self.canvas.pack(fill="both", expand=True)
self.img = tk.PhotoImage(file="Club14.gif")
self.card1 = self.canvas.create_image(0, 0, image=self.img, anchor="nw")
self.card2= self.canvas.create_image(800, 800, image=self.img, anchor="nw")
self.move_object(self.canvas, self.card1, [400, 410], 8)
self.move_object(self.canvas, self.card2, [400, 440], 8)
def move_object(self, canvas, object_id, destination, speed=50):
dest_x, dest_y = destination
coords = self.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, self.move_object, canvas, object_id, destination, speed)
if __name__ == "__main__":
root = tk.Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))
gui(root)
root.mainloop()
私は問題が表示されません。 2つ目のアイテムが後で移動するのを待つ場合は、 'self.move_object'を移動開始準備が整うまで2度目に呼び出さないでください。 –