我有许多重叠的形状代表画布上不相关的背景项目。我还有一个不重叠的圆圈图案,每个圆圈都是一个“洞”。每个“洞”精灵(圆圈)都有一个关联的“洞”对象,尽管从未在代码中明确显示。(旁注:我希望在模型和视图与这些对象之间建立逻辑关联,但还没有找到一种聪明的方法来做到这一点)。每个“洞”都是不同的,有不同的效果。
有一个小的圆形“球”,可以拖入任何“洞”。我找到了如何从这个问题拖放。我需要找出球进了哪个洞。
到目前为止,我发现最好的方法是:
创建一个字典,将孔精灵中心的坐标映射到孔对象
像这样标记每个孔:
t=("hole", "hole_at_{}_{}".format(x, y))
在释放球时,这样做:
def on_ball_release(self, event): '''当用户释放鼠标按住球时处理按钮事件。'''
# use small invisible rectangle and find all overlapping items items = self._canvas.find_overlapping(event.x - 10, event.y - 10, event.x + 10, event.y + 10) for item in items: # there should only be 1 overlapping hole if "hole" in self._canvas.gettags(item): # get the coordinates from the tag coords = tuple([int(i) for i in self._canvas.gettags(item)[1].replace("hole_at_", "").split("_")]) # get associated object using dictionary established before hole = self._hole_dict[coords] hole.process_ball() return
这似乎非常混乱。我觉得应该有一些更聪明的方法来做到这一点。