2017-09-14 107 views
1

當引用kv中的kivy項目時,爲什麼不能使用變量?用kivy引用kv中的項目時遇到的問題

self.ids.top_left.background_normal = "x.png" 

而「TOP_LEFT」是直接在KV文件中的ID和「x.png」直接引用的圖片能正常工作。但是,當我這樣說:

button_pressed = top_left 
picture_touse = "x.png" 
self.ids.button_pressed.background_normal = picture_touse 

那麼它打破了,給我一個錯誤:

AttributeError: 'super' object has no attribute '__getattr__' 

我怎麼能指使用生成引用一個千伏項目?

+0

順便說,我已經採用[]方括號試圖圍繞答案呃,被告知這可能會解決問題,使其成爲__dict查找,但方括號中我得到一個語法錯誤指向第一個括號,所以這是不被Python接受。我也試圖限制類型添加str(top_left),例如以確保它被視爲一個字符串,但沒有改變。 – Rayne

+0

真棒,變量可以使用!,我必須在這裏明確(它應該進入標題/問題),以便谷歌會找到這個和答案 –

回答

0

沒關係,只是找到了答案,任何人想要做到這一點,只需創建:

check_ref = {}

指的一個ID時(稱之爲你想要什麼)然後把之前調用它在方括號中的信息的其餘部分,如:

self.ids.check_ref[button_pressed].background_normal = check_ref[picture_touse] 
1

由於kivy地方所有的部件標記的ID在一個字典類型歡迎使用屬性。因此,你可以使用dict [key]來引用它。該解決方案是更換

self.ids.button_pressed.background_normal = picture_touse 

self.ids[button_pressed].background_normal = picture_touse 

片段

class ScreenTwo(Screen, Widget): 

    def methodforbuttonpress(self, button_pressed): 
     kivy_logo = "kivy-logo-black-64.png" 
     self.ids[button_pressed].background_normal = kivy_logo 

輸出

enter image description here

+0

變量使用ids或id,真棒 –

相關問題