为什么移动 canvas 对象的功能不起作用

Why is function to move canvas object not working

objective是移动alien1,atarts从0,0开始一直向右移动,向下移动然后一直向左移动,然后向下

from tkinter import *
import random

def enemigos():
    global Enemigos  #Enemigos downloads the image for alien1
    n = random.randint(1,3)
    
    if n == 1:
        def movalien1():
            alien1 = CanvasJuego.create_image(0,0, anchor = NW, image = Enemigos[0], tags= ('alien1'))
            RIGHT1 = True
            CoordsAlien1 = CanvasJuego.coords(alien1)
            if (CoordsAlien1[0] < 1000 and RIGHT1==True):
                CanvasJuego.coords(alien1, CoordsAlien1[0]+5, CoordsAlien1[1])
                if ((CoordsAlien1[0]+5)==1000):
                    RIGHT1 = False
                    CanvasJuego.coords(alien1, CoordsAlien1[0], CoordsAlien1[1]+50)
            elif (CoordsAlien1[0]>0 and RIGHT1==False):
                CanvasJuego.coords(alien1, CoordsAlien1[0]-5, CoordsAlien1[1])
                if ((CoordsAlien1[0]-5)==0):
                    RIGHT1 = True
                    CanvasJuego.coords(alien1, CoordsAlien1[0], CoordsAlien1[1]+50)
            def rec():
                movalien1()
            root.after(20,rec)
        root.after(20,movalien1())
        

Alien1确实出现在(0,0)处,但不会移动。

问题是您每 20 毫秒创建一个新的“外星人”。您应该在 movalien1 之外恰好创建一次 alien1。发生的事情是您在 0,0 处创建它,然后将其移动到 5.0。外星人在 5,0。下一次通过循环在 0,0 处创建一个 new 外星人,然后将其移动到 5,0。你一遍又一遍地创造新的外星人并将新的外星人移动到 5,0.

此外,您可以使用 move 方法移动项目而不是调整其坐标。

最后,尽管在此代码中实际上并不重要,但您在这里错误地调用了 afterroot.after(20, movealien1())。它需要是 root.after(20, movealien1) 或直接调用 movealien1() 而不使用 after.