【问题标题】:Python : Only one element return in tuple return by find_closestPython:find_closest 返回的元组中只有一个元素返回
【发布时间】:2013-01-25 20:42:47
【问题描述】:

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

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 应该返回一个元组,其中所有项目的 id 围绕 x、y 坐标在 200 范围内。 是我看不懂还是做错了?

【问题讨论】:

  • 在 tkinter 上没有任何经验:我认为 closest 是最高级的——因此它应该只返回一个——最高级。否则函数应该命名为find_close——但正如我所说:我没有使用 tkinter 的经验

标签: python canvas tkinter tuples closest


【解决方案1】:

来自关于find_closest()here的文档

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

【讨论】:

  • @MathieuRobert - 乐于助人!
猜你喜欢
  • 2016-10-21
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多