Canvas.Move不起作用

时间:2016-01-31 16:38:11

标签: python python-3.x canvas tkinter

def moveR(amount):
   global x
   global y
   x = x+amount
   can.itemconfig(player, image = playerImageL)
   can.move("player", x, y)
   root.update()

##SETTING##

can = Canvas(width = 850, height = 550, bg = "black")
can.pack(expand = YES, fill = BOTH)

player = can.create_image(x, y, image = playerImageL, anchor = NW)
root.update()

嘿,我正在尝试使用tkinter和canvas创建一个迷你游戏但是移动命令不起作用。如您所见,SETTING是稍后在我调用的代码

中的设置
moveR(100)

然而它不起作用,似乎完全破坏了我的精灵/图像。

2 个答案:

答案 0 :(得分:2)

文字"player"和变量player是两回事。

player

中使用变量move()
can.move(player, x, y)

顺便说一句:你不需要itemconfig()

答案 1 :(得分:1)

请阅读https://stackoverflow.com/help/mcve。要使代码易于验证,请使用矩形而不是图像。 (对于任何项目,您的代码都会失败。)

Canvas.move(item, delta_x, delta_y)将项目移动给定的x和y金额。它执行x + dy计算本身,所以你不应该这样做。如果要移动到给定位置,请使用Canvas.coords(item, x0, y0, x1, y1)。如果新边界框的大小与其不同,它也会改变形状。以下示例使用这两种方法。作为奖励,它还显示了如何使用root.after进行重复更改。

import tkinter as tk
root = tk.Tk()
can = tk.Canvas(root, width=800, height=500)
can.pack()
rec = can.create_rectangle(0, 0, 100, 100, fill='red')
def rmove():
    box = can.bbox(rec)
    if box[0] < 700:
        can.move(rec, 100, 30)
        root.after(1000, rmove)
    else:
        can.coords(rec, 0, 400, 50, 500)  # position with new shape
root.after(1000, rmove)
root.mainloop()