Kivy返回" AttributeError:' NoneType'对象没有属性' bind'"访问ListProperty时

时间:2016-03-26 20:34:22

标签: python python-2.7 kivy listproperty

我试图创建一个显示图像文件的屏幕,该图像文件的路径存储在ListProperty中。我知道错误消息表明Kivy在ListProperty创建之前尝试访问该值,但我不知道如何解决这个问题。

这是我的main.py脚本中的一个片段,其中属性初始化为包含单个空字符串的空列表,并调用构建方法:

presentation = Builder.load_file("main.kv")

class MainApp(App):
    image_list = ListProperty([''])

    def build(self):
        return presentation

if __name__ == '__main__':
    MainApp().run()

这是main.kv的一部分,其中使用了属性:

<Screen1>:
    name: 'screen1'
    BoxLayout:
        orientation: 'horizontal'
        Picture:
            source: app.image_string.pop()

抛出的异常如下:

 ...
 BuilderException: Parser: File "main.kv", line 71:
 ...
      69:        orientation: 'horizontal'
      70:        Picture:
 >>   71:            source: app.image_string.pop()
      72:

如何解决此问题的任何指导将非常感激。谢谢!

编辑 Reader FIns指出我正在调用 image_string 而不是image_list,但即使进行了更正,我也会遇到同样的错误:

BoxLayout:
    orientation: 'horizontal'
    Picture:
        source: app.image_list.pop()
 BuilderException: Parser: File "main.kv", line 71:

而且......

 BuilderException: Parser: File "main.kv", line 71:
 ...
      69:        orientation: 'horizontal'
      70:        Picture:
 >>   71:            source: app.image_list.pop()

1 个答案:

答案 0 :(得分:2)

在构建方法中加载kivy设计语言在此示例中起作用:

from kivy.app import App 
from kivy.properties import ListProperty 
from kivy.base import Builder

class MainApp(App):
    image_list = ListProperty([''])

    def build(self):
        presentation = Builder.load_string(""" 
Screen:
    name: 'screen1'
    BoxLayout:
        Image:
            source: app.image_list.pop()
    """)

        return presentation

if __name__ == '__main__':
    MainApp().run()