Python 大小为负的collide_小部件

Python 大小为负的collide_小部件,python,kivy,Python,Kivy,我有一些小部件,想“拖动并选择”它们。我使用一个选择小部件作为矩形来显示选择大小,然后对root中的child使用。children:selection.collide_小部件(child)。只要我从左下到右上方向拖动,效果就很好,因为选择小部件的大小将是正的 是否期望具有负大小的小部件不能与collide_小部件一起工作 我是否应该对小部件使用负尺寸 kv文件: <SelectionBox>: size: 0,0 size_hint: None, None

我有一些小部件,想“拖动并选择”它们。我使用一个选择小部件作为矩形来显示选择大小,然后对root中的child使用
。children:selection.collide_小部件(child)
。只要我从左下到右上方向拖动,效果就很好,因为选择小部件的大小将是正的

是否期望具有负大小的小部件不能与collide_小部件一起工作

我是否应该对小部件使用负尺寸

kv文件:

<SelectionBox>:
    size: 0,0
    size_hint: None, None
    canvas:
        Color:
            rgba: 1, 1, 1, 0.1
        Rectangle:
            pos: root.pos
            size: root.size

<Selectable>:
    size: 32, 32
    size_hint: None, None
    canvas:
        Color:
            rgba: 0, 1, 0, 1
        Rectangle:
            pos: root.pos
            size: root.size

事实上,这种行为是意料之中的。从
kivy.uix.widget.widget

def collide_widget(self, wid):
    if self.right < wid.x:
        return False
    if self.x > wid.right:
        return False
    if self.top < wid.y:
        return False
    if self.y > wid.top:
        return False
    return True
这将处理大小为正或负的两个小部件(调用
collide_小部件的小部件和正在测试的小部件)

然而,我不确定其他地方的代码是否依赖于负数大小,而不是预期的冲突(所以要小心地在
小部件上安装monkey补丁)

def collide_widget(self, wid):
    if self.right < wid.x:
        return False
    if self.x > wid.right:
        return False
    if self.top < wid.y:
        return False
    if self.y > wid.top:
        return False
    return True
def collide_widget(self, wid):    
    if max(self.x, self.right) < min(wid.x, wid.right):
        return False
    if min(self.x, self.right) > max(wid.x, wid.right):
        return False
    if max(self.top, self.y) < min(wid.y, wid.top):
        return False
    if min(self.top, self.y) > max(wid.y, wid.top):
        return False
    return True