2015-09-27 86 views
0

我使用Kivy構建了一個簡單的應用程序,該應用程序可以在選項卡式面板的不同選項卡中加載不同的圖像。不同的面板項目應該具有相似的行爲,但具有不同的圖像,所以我創建了一個窗口小部件類。我正在嘗試使用kv語言來初始化我的應用程序,就像在許多示例中一樣。
目前,我無法使其工作,因爲我無法找到如何將列表中的文件名從kv語言部分傳遞到小部件實例。我能夠與其他屬性,但ListProperty讓我難住。Kivy:從kv語言設置ListProperty

這裏是我的代碼片段:

Builder.load_string(""" 
<MyMainClass>: 
    #stuff 
    TabbedPanelItem: 
     MyClassLayout: 
      filenames: ['pic1.jpg', 'pic2.jpg', 'pic3.jpg', 'pic4.jpg'] 
    #other TabbedPanelItems like the one above, 
    #with different strings in the list 
""") 

def MyMainClass(TabbedPanel): 
    pass 

def MyClassLayout(FloatLayout): 
    filenames = ListProperty([]) 
    #rest of my class 

事情我已經嘗試過:

  • 使用不同括號在KV語言部分分配名單:我想()和{} ,也沒有括號。
  • 以不同的方式初始化ListProperty:我試着把一些字符串放在裏面了。
  • 發送不同的列表:我試着發送數字而不是字符串。

結果始終是我的小部件中的文件名列表始終處於默認值。這可能是[]上面的代碼片段,或者是我在我的課程中聲明的任何內容。

有人請指出我做錯了什麼嗎?

謝謝。

回答

1

我設法解決這個問題。

問題是我試圖讀取構造函數中的列表。但是,在widget對象完成其構造函數之後,它們會從kv lang部分接收它們的值。

作爲一個解決方法,我稱之爲讀取列表,像這樣的方法:

Clock.schedule_once(self.late_init, 0.02) 

我希望人們能發現這一點,它可以幫助他們。