如何在tkinter中更改形状(即椭圆形)的坐标?

时间:2016-02-04 20:30:06

标签: python tkinter python-3.5 tkinter-canvas

我正在尝试制作一个程序,当您按下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()

2 个答案:

答案 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)。希望对您有所帮助!