2015-09-27 2 views
0

Я использую Kivy для создания простого приложения, которое будет загружать разные изображения на разных вкладках панели с вкладками. Различные элементы панели должны вести себя одинаково, но с разными изображениями, поэтому я создал класс виджетов. Я пытаюсь инициализировать мое приложение, используя язык kv, как во многих примерах.
В настоящее время я не могу заставить его работать, потому что я не могу найти, как передать имена файлов в списке из части языка kv в экземпляр виджета. Я могу работать с другими свойствами, но ListProperty меня озадачивает.Kivy: set ListProperty from kv language

Вот отрывок из моего кода:

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 

Вещи, которые я уже пытался:

  • Используйте различные скобки в присвоении списка на языке киловольт часть: Я пытался() и {} , а также без круглых скобок.
  • Инициализировать ListProperty по-другому: я попытался вставить в него некоторую строку.
  • Отправить другие списки: Я попытался отправить числа вместо строк.

Результат всегда заключается в том, что список имен файлов в моем виджете всегда находится по умолчанию. Это будет [] в фрагменте выше, или что бы я ни указал в своем объявлении в моем классе.

Кто-нибудь, пожалуйста, укажите, что я делаю неправильно?

Спасибо.

ответ

1

Мне удалось это исправить.

Проблема в том, что я пытался прочитать списки в конструкторе. Однако они получают свое значение из части kv lang после того, как объект виджета завершил свой конструктор.

Как исправить, я вызываю метод, который читает список, как так:

Clock.schedule_once(self.late_init, 0.02) 

Я надеюсь, что люди находят это, и это помогает им.