2016-12-15 145 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

相關問題