2015-09-27 58 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) 

我希望人们能发现这一点,它可以帮助他们。