我正在尝试制作一个程序,当您按下S按钮时,它会将形状移动到网格下方的方形。我已经设法让第一次移动的形状,但之后它不断变大。
这是我的代码:
from tkinter import *
root = Tk()
global y
y = 0
x = 0
def down(event):
global y
global x
y = y+100
x = x+ 100
global pirate
canvas.delete(pirate)
pirate = canvas.create_oval((x,y), (100,100), fill = 'red')
print(y)
canvas = Canvas(root, width = 1000, height = 1000)
canvas.pack()
for a in range (10):
i = a*100
canvas.create_line((i,0), (i,1000))
for a in range (10):
i = a*100
canvas.create_line((0,i), (1000,i))
pirate = canvas.create_oval((x, y),(100, 100), fill = 'red')
root.bind('<Key - S>', down)
root.mainloop()
答案 0 :(得分:3)
正如ArtOfWarfare在评论中提到的那样,不是每次创建新的椭圆形,而是创造一个和move那个东西。
def down(event):
canvas.move(pirate, 0, 100)
以上代码足以在您的代码中将椭圆形向下移动一个方格。
假设您需要移动椭圆而不是仅仅向下移动椭圆,而不是仅将S
绑定到画布,我认为您应该获取所有关键事件并根据按下的字符进行操作。
def keyPressed(event):
if event.char.lower() == 's': #move it down if it's S or s
canvas.move(pirate, 0, 100)
root.bind('<Key>', keyPressed) #get all key pressed events
答案 1 :(得分:0)
您有一个问题,在python-tk中未指定create_oval(x,y,w,h)
,而是指定create_oval(x1,y1,x2,y2)
。希望对您有所帮助!