tkinter在画布上移动对象

5

我是python的新手。我在尝试在画布上实现简单的物体移动。

想法是简单地更新X、Y坐标并重新绘制椭圆形。

我已经试过每次更新坐标时使用canvas.update(),但这样做不起作用。

class character():
    x = 10
    y = 10
    color = "red"
    canvas.create_oval(x, y, x + 40, y + 40, fill=color)


def moveup():
    character.y -= 10
def moveright():
    character.x += 10
def movedown():
    character.y += 10
def moveleft():
    character.x -= 10


def choose():
    choosen_move = randint(0, 4)

    if choosen_move == 0:
        moveup()
    elif choosen_move == 1:
        moveright()
    elif choosen_move == 2:
        movedown()
    elif choosen_move == 3:
        moveleft()

    print "%s | %s" % (character.x, character.y)
    canvas.update()
    sleep(1)


while True:
    choose()
root.mainloop()
2个回答

4

你需要使用move,而不是character.x += 10或者character.y -= 10

canvas.move(oval, 10, 0)   #  for x += 10
canvas.move(oval, 0, -10)  #  for y -= 10

其余步骤应该跟随。

你可以使用create_oval(x, y, x + 40, y + 40, fill=color)而不是Character类。


谢谢您的回答。我尝试使用这种方法。我编写了一个简单的函数,每次点击按钮时都会运行。它起作用了。每次点击都会将椭圆形移动10个单位。但是当我尝试使用循环来移动椭圆形时,它会在最终位置显示出来。例如 for i in range(5): canvas.move(oval, 10, 0) 它会将椭圆形移动50个单位然后出现。 - user4540334
我解决了这个问题。root.after(2000, task) 谢谢 - user4540334

0

请注意:这些代码均无法运行——只是为了给你提供如何完成任务的想法。:)

我用键盘绑定了一些对象,当按下按钮时,它们会在屏幕上移动。

与其使用循环,不如通过配置和绑定来改变对象的 x 和 y 值……当你按下键盘上的左箭头时,将会运行 def 函数使物体(或多个物体)移动。

def move_object_left()...
   object.config(move left...)

绑定某物的示例:

entry.bind('<ButtonRelease-1>', lambda event: self.maximise_keyboard(event.widget))

x_var = 5 y_var = 9

**在此绑定一个对象到键盘:

*On_key_press('RIGHT'):
    x_var = x_var + 5
    object.config(x = x_var)

如果你想的话,可以一次性移动一堆东西...(尽管你得自己写代码哈哈)

list_of_stuff = [树, 灌木, 蜗牛]

    for entry in list_of_stuff:
        ...
        **Get object X and Y of the object...
        ** add a number to this X and Y...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接