2016-12-15 46 views
0

我在kivy上做了一种android锁定的事情,并且画出线条,我需要获取鼠标在窗口小部件上的id,所以我分配了一个id每一个这样的.kv文件:在python/kivy上获取当前窗口小部件的id

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

,我知道我可以得到所有的IDS(我有9个,当然),与

self.parent.ids.id 

self.parent.ids['id'] 

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

self.parten.ids.current 

或类似的东西? 感谢您的帮助

回答

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的代码片段中获得可行的行为。

编辑:

请注意,在小部件实例

这意味着self.ids.my_id.id == None,因此真正得到id你需要做的这个ID将无法使用:

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

谢谢!我明白了,但是,我记得有一种方法可以从主类(App)获取变量,我在那里声明它,然后有一个类似“.get_running_App”或类似的东西的方法..(我可以也没有发现,我认为文件不是很清楚,我认为)。你有什么机会知道我在说什么? – gramsch

+0

'self.app = App.get_running_app()'最有可能在'__init__'方法中,然后你可以从'App'类基本​​上通过'self.app。 ' – KeyWeeUsr

+0

我需要的唯一东西就是获取当前鼠标所在的id的id,因为当我打印Self或self.id时,我只能得到<__ main __。ClickableImage对象在0x7fa671a713d0>或None,我如何获得当前Widget的ID?所以我可以将它转移到应用程序中的一个变量,并使用它 – gramsch

相关问题