我在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
或类似的东西? 谢谢你的帮助
答案 0 :(得分:2)
您可以使用collide_widget
或collide_point
并在窗口小部件集中设置一个方法,该方法将更改parent
中的变量,假设selected_widget
为当前窗口小部件,就像这样:
if self.collide_point(*Window.mouse_pos):
self.parent.selected_widget = self # or its id
然后你可以做任何事情。也许将你的逻辑放入小部件本身并直接处理碰撞会更好。显然,您需要将使用上面的if
块创建的方法绑定到on_release
或on_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