获取python / kivy上widget的当前id

时间:2016-12-15 07:30:47

标签: python kivy python-2.x

我在kivy上制作了一种安卓锁定的东西,为了绘制线条,我需要获取鼠标所在的小部件的ID,所以我在每个人身上给这样的一个id。 .kv文件:

ClickableImage:
    id: one
    source: 'button.png'
    etc.

我知道我可以使用

获得所有ID(我当然有9个)
self.parent.ids.id

self.parent.ids['id']

但有没有办法获取鼠标所在的ID?还是我点击的那个?我有一个可上课的类,所以它可以检测到它何时进入Widget,但我真的不知道如何获得它的位置,或者改变它的来源。 有没有:

self.parten.ids.current

或类似的东西? 谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

您可以使用collide_widgetcollide_point并在窗口小部件集中设置一个方法,该方法将更改parent中的变量,假设selected_widget为当前窗口小部件,就像这样:

if self.collide_point(*Window.mouse_pos):
    self.parent.selected_widget = self  # or its id

然后你可以做任何事情。也许将你的逻辑放入小部件本身并直接处理碰撞会更好。显然,您需要将使用上面的if块创建的方法绑定到on_releaseon_press之类的事件,因此请运行该方法,否则将无法执行任何操作。

您还可以从this PR或甚至this代码段中获得可支持行为。

修改

  

请注意,小部件实例中的ID不可用

这意味着self.ids.my_id.id == None,因此要实际获得id,您需要这样做:

def find(self, parent, widget):
    for id, obj in parent.ids.items():
        if obj == widget:
            print id
            return id