Вот шаги, которые вы можете сделать здесь:
- Получить наборы идентификаторов объектов, которые вы создали на
canvas
. Вы можете сделать это, используя canvas.find_all()
метод. - Получить координаты этих объектов, используя
canvas.coords(id)
.
Я проверил стандартный find_overlapping
метод canvas
. Это помогает определить, какой объект перекрывается только с указанным c прямоугольником, и я думаю, что вам нужно решить проблему, которую вы упомянули, с использованием некоторой математики с помощью этого метода. Хотя я нашел хорошую альтернативу, не основанную на find_overlapping
:
def find_overlaps(self):
r = 5
X = []
tags = self.canvas.find_all() #finds tags of all the object created
for tag in tags:
x0, y0, x1, y1 = self.canvas.coords(tag) # corresponding coordinates
center = [(x0+x1)/2, (y0+y1)/2] #centers of objects
X.append(center)
tree = cKDTree(X)
print(tree.query_pairs(2*r))
Вывод
Это набор пар тегов:
{(2, 63), (10, 93), (70, 82), (8, 45)}
Примечание
from scipy.spatial import cKDTree
требуется