2

我有这段代码,它创建一个矩形,如果他附近有其他东西,可以说:

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 坐标范围内的所有项目的 id 都在 200 范围内。这是我不理解还是做错了什么?

4

1 回答 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 - 下边缘。
返回:
包含所有匹配项的元组。

于 2013-01-25T20:53:12.717 回答