Python:在元组中只有一个元素返回由find_closest返回

时间:2013-01-25 20:42:47

标签: python canvas tkinter tuples closest

我这个代码如果他附近还有别的东西,就会创建一个矩形的说法:

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。 这是我不理解或做错的事情吗?

1 个答案:

答案 0 :(得分:6)

有关find_closest() here

的文档
  

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

返回最接近X,Y像素的项目。   如果几场比赛占据最高位置。   比HALO更接近的所有项目都被认为是重叠的(所有项目都是   closests)。如果指定了START,则会在此标记下方接下来。

所以find_closest()只会给你一个最近的项目。如果你想在一个点的距离内找到多个项目(这听起来像你想要的那样),试试:

  

find_overlapping(x1,y1,x2,y2)
  查找与给定矩形重叠的所有项目,或者完全由其包围的项目。   
x1 - 左边缘。   
y1 - 上缘。   
x2 - 右边缘。   
y2 - 下缘。   
返回:   
包含所有匹配项的元组。