【问题标题】:Moving defined objects in python canvas在 python 画布中移动定义的对象
【发布时间】:2018-11-27 16:28:16
【问题描述】:

我不想在画布中移动已定义的对象。我知道有一个命令可以移动对象(.move),但它只适用于单个项目。那么如何移动由矩形组成的整个定义的对象呢? 像例子中的那个?因为我需要将数百个小物体作为一个整体移动。

x=400
y=400



def player(x,y):
    canvas.create_rectangle(x,y,x+50,y+50,fill='black')
    canvas.create_rectangle(x,y+50,x+150,y+150,fill='red')


def moveright(coordinates2):
    global x
    global y
    x=x+200
    y=y+0
    player(x,y)

def moveleft(coordinates3):
    global x
    global y
    x=x-200
    y=y+0
    player(x,y)

def moveup(coordinates4):
    global x
    global y
    x=x+0
    y=y-150
    player(x,y)

def moveright(coordinates5):
    global x
    global y
    x=x+0
    y=y+150
    player(x,y)



canvas.bind_all('<Right>',moveright)
canvas.bind_all('<Left>',moveleft)
canvas.bind_all('<Up>',moveup)
canvas.bind_all('<Down>',movedown)

【问题讨论】:

  • 请尽量减少到minimal reproducible example 我们不需要所有绑定的所有代码,只需要与移动相关的代码。我们也不需要几十个画布项目,而只需要一两个就可以解决这个问题。

标签: python tkinter tkinter-canvas


【解决方案1】:

与您在问题中所说的不同,如果您使用标签,move 确实适用于项目组:canvas.move(&lt;tag or id&gt;, x, y)

这是一个例子:

import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root)
canvas.pack()


def move():
    # move all items with the 'group' tag
    canvas.move('group', 10, 10)


canvas.create_rectangle(10, 10, 30, 30, tags=['group'])
canvas.create_rectangle(20, 40, 50, 70, tags=['group'])
canvas.create_rectangle(60, 50, 80, 60, tags=['group'])

tk.Button(root, text='Move', command=move).pack()
root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多