Python: find_closest 返回的元组中仅返回一个元素

2 投票
1 回答
1790 浏览
提问于 2025-04-17 13:42

我有一段代码,它可以创建一个矩形,并判断周围是否有其他东西:

def creaRect(event):
    #rect = Rectangle.Rectangle(canvas, event, CanWidth=Width, CanHeight=Height)
    width, height = 25, 25
    x, y = event.x, event.y
    x1 = int(x-width/2)
    y1 = int(y-height/2)
    x2 = int(x+width/2)
    y2 = int(y+height/2)
    rect = canvas.create_rectangle((x1, y1, x2, y2), outline="red", width=1, tags="bloc")
    Rectangle.OidRect.append(rect)

    near = canvas.find_closest(x, y, 200)
    print(len(near))

但是,find_closest这个函数返回的元组长度总是1,尽管我在同一个位置或者非常近的地方创建了很多矩形。对我来说,find_closest应该返回一个元组,里面包含在x和y坐标周围200范围内的所有物体的ID。请问我是不是哪里没理解或者做错了?

1 个回答

6

这是关于 find_closest() 的文档内容,详细信息可以在 这里 找到。

find_closest(self, x, y, halo=None, start=None)

这个函数会返回离你指定的 X 和 Y 坐标最近的那个物品。如果有多个物品距离相同,它会返回最上面的那个。所有距离小于 HALO 的物品都被认为是重叠的(也就是说,它们都是最近的物品)。如果指定了 START,那么会返回这个标签下面的下一个物品。

所以 find_closest() 只会给你一个最近的物品。如果你想找多个在某个点附近的物品(听起来你是想这样做),可以试试:

find_overlapping(x1, y1, x2, y2)
这个函数会找到所有与给定矩形重叠的物品,或者完全被这个矩形包围的物品。
x1 - 矩形的左边缘。
y1 - 矩形的上边缘。
x2 - 矩形的右边缘。
y2 - 矩形的下边缘。
返回的结果是一个包含所有匹配物品的元组。

撰写回答