canvas.bind 是否在 while 循环中工作

Does canvas.bind work in a while loop

我在 Python 3.4.4 中有一个使用 Tkinter 的程序,它应该在屏幕周围移动一个正方形。

不幸的是,canvas.bind 在 while 循环内似乎不起作用,但它需要在 while 循环内,否则方块不会移动。这是因为每次循环运行时,我在技术上绘制一个具有不同 x、y、x1 和 y1 坐标的新方块,绑定是使方块根据箭头键在每个方向上移动的原因。

代码如下:

from tkinter import *
import time, random
tk = Tk()
canvas = Canvas(tk, width = 1000, height = 1000)
canvas.pack()

def move(event):
    if event.keysym == 'Up':
        y-=10
        y1-=10
    elif event.keysym == 'Down':
        y+=10
        y1+=10
    elif event.keysym == 'Right':
        x+=10
        x1+=10
    elif event.keysym == 'Left':
        x+=10
        x1+=10


background = canvas.create_rectangle(0, 0, 1000, 1000, fill = 'orange') #draws background
ranNum=random.random()*960  #Creates a random number
ranNum1=random.random()*960 #Creates a random number
food = canvas.create_rectangle(ranNum, ranNum1, ranNum + 15, ranNum1 + 15, fill='green') #creates food
r1 = None
o = 0
length = 4
x = 500
y = 500
x1 = 515
y1 = 515
while o < length:          
    if canvas.find_overlapping(ranNum, ranNum, ranNum + 15, ranNum1 + 15) == True:
        x+=5
        y+=5
        x1+=5
        y1+=5
        canvas.delete(food)
    r=canvas.create_rectangle(x, y, x1, y1, fill = 'blue')
    canvas.bind('<KeyPress-Up>', move )
    canvas.bind('<KeyPress-Down>', move)
    canvas.bind('<KeyPress-Left>', move)
    canvas.bind('<KeyPress-Right>', move)
    time.sleep(.0)
    canvas.delete(r1)
    tk.update()
    r1 = r

不要更改 x 或 y,每次更改都需要 canvas 项目配置