当我只知道坐标时,如何在tkinter画布上移动对象?

2024-09-29 21:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

for i in range(random.randint(1,4)):
    xos=[150,200,250,300,350,400,450,500,550,600,650,700,750,800,850]
    yos=[150,200,250,300,350,400,450,500,550,600,650]
    xos_=random.choice(xos)
    yos_=random.choice(yos)
    object=canvas.create_image(xos_,yos_,image=postava)
    read_=read.replace("[","").replace("]","").replace("'","").replace("\\n","").replace("\\","")
    loot.write(read_+"\n")

我正在为在画布上创建图像,我想在需要时删除它们 ,但只有最后一个有tag(name)对象,所以当我键入:画布.删除(object)它只删除最后一个。所以我想知道是否可以删除位于某个位置的对象(不带名称/标记)。在


Tags: 对象inimageforreadobject画布range
2条回答

当然可以。场景(A)假设我们在单击时使用鼠标左键来标识画布对象,当鼠标左键被释放时删除对象。在

步骤1:将这些命令包含到用于绑定到Button-1以删除对象的回调/方法中。在

mx = canvas.canvasx(event.x) #Translate mouse x screen coordinate to canvas coordinate
my = canvas.canvasy(event.y) #Translate mouse y screen coordinate to canvas coordinate
self.canvasobject = canvas.find_closest(mx, my, halo=5) # get canvas object ID of where mouse pointer is 
print(self.canvasobject) #For you to visualize the canvas object number

第2步:将这些命令包含到用于绑定到ButtonRelease-1以删除对象的回调/方法中。在

^{pr2}$

场景(B):假设您已经知道对象画布的x,y坐标,您可以发出一个命令来删除画布对象:

canvas.delete(canvas.find_closest(x, y, halo=5))

关于我使用过的canvas方法和其他canvas方法的解释,请参见这个webpage。在

如果知道坐标(坐标),可以删除画布上的对象。使用item = canvas.find_overlapping(coord)查找该位置的对象,然后使用canvas.delete(item)删除它

参见下面的示例代码:

注意:如果只知道对象上的一个点,则使用canvas.find_overlapping(x, y, x, y)而不是{}

import Tkinter as tk
import random


root = tk.Tk()
canvas = tk.Canvas(root, width=550, height=500, borderwidth=0)
canvas.pack(expand=True, fill="both")

coord_list=[]

for i in range(random.randint(1,4)):
    xos=[150,200,250,300,350,400,450,500]
    yos=[150,200,250,300,350,400,450]
    xos_=random.choice(xos)
    yos_=random.choice(yos)

    coord = (xos_,yos_,xos_+50,yos_+50)
    coord_list.append(coord)
    objectt=canvas.create_rectangle(coord, fill="blue")
canvas.create_rectangle(25, 15, 50, 40, fill="red")

# Delete red rectangle
def delete1(event):
    item = canvas.find_overlapping(25, 15, 50, 40)
    canvas.delete(item)

# Delete blue rectangles
def delete2(event):
    for coord in coord_list:
        item = canvas.find_overlapping(*coord)
        canvas.delete(item)

#Click on the canvas to delete objects at the coordinates
canvas.bind("<Button-1>", delete1) # change function to delete blue rectangles
root.mainloop()

相关问题 更多 >

    热门问题