Kivy возвращает "AttributeError: объект NoneType" не имеет атрибута "bind" при доступе к 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:
Любое руководство о том, как это исправить, будет с благодарностью. Спасибо!
EDIT 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 ответ
Загрузка языка дизайна kivy внутри метода build работает в этом примере:
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()