Я создаю инструмент «Выбор ящика» для программы, которую разрабатываю в Wx python. Я использую класс PseudoD C для рисования.
Пользователь должен иметь возможность нарисовать поле, чтобы выбрать нарисованные объекты узлов на графе узлов по их идентификатору, но я не могу найти хороший способ получить идентификаторы, которые находятся в поле выбора.
До сих пор я придумал следующее:
def OnLeftUp(self, event):
...
# This is in the mouse event method which calls the *BoxSelectHitTest* method below.
self._selectednodes = self.BoxSelectHitTest(
wx.Point(self._bboxRect[2]/2,
self._bboxRect[3]/2)
)
...
def BoxSelectHitTest(self, pt):
# self._bboxRect is the wx.Rect of the Box Select
average = (self._bboxRect[3] + self._bboxRect[2])/2
idxs = self._pdc.FindObjects(pt[0], pt[1], int(average))
hits = [
idx
for idx in idxs
if idx in self._nodes
]
# Return the node objects from the IDs
if hits != []:
nodes = []
for Id in hits:
nodes.append(self._nodes[Id])
return nodes
else:
return []
Это, очевидно, неверное поле выбора. Это больше похоже на плохой вариант выбора круга. (Радиус в среднем - это только моя попытка заставить его «работать».)
Я не смог найти метод в PseudoD C, который бы возвращал идентификаторы объектов в данном wx .Rect . Есть метод, который делает это или как это должно быть реализовано правильно?
Спасибо.