2016-03-26 2 views
1

Я пытаюсь создать экран, который отображает файл изображения, путь которого хранится в ListProperty. Я понимаю, что сообщение об ошибке указывает, что Kivy пытается получить доступ к значению до создания ListProperty, но я не знаю, как это исправить.Kivy возвращает «AttributeError: объект« NoneType »не имеет атрибута« bind »при доступе к 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 Читатель 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() 
+0

в приложении вы объявили 'image_list', но вы использовали' image_string' в main.kv – fins

+0

Oop! Ты прав. Я экспериментировал с ListProperty и StringProperty, но это все еще не решает мою проблему. Даже если я исправлю эту синтаксическую ошибку, я получаю такое же поведение. – DevilsFan

ответ

2

loading 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() 
+0

Спасибо Flns! Я сделаю это. Я думаю, что я предпочел бы поддерживать только один файл, так что использование строки сборки, вероятно, лучший способ. – DevilsFan

+0

Спасибо миллион FIns !! Я вытягивал свои волосы на два дня, и вы решили работать отлично! Я очень признателен, что вы помогаете мне в этом. – DevilsFan

 Смежные вопросы

  • Нет связанных вопросов^_^