2015-05-22 3 views
0

Недавно я начал использовать kivy, и у меня есть вопрос об изменении фона. Мне нужно создать несколько виджетов с разными фонами. я делаю это неправильно, но я не получил:Виджет с переменным фоном Kivy

Kv file: 
<[email protected]>: 
    canvas.before: 
     Color: 
      rgb: self.rgb 
     Rectangle: 
      pos: self.pos 
      size: self.size 
main.py 
widget = Widget() 
myWidget1 = Factory.MyWidget(rgb=[1,0,0]) 
myWidget2 = Factory.MyWidget(rgb=[0,1,0]) 
myWidget3 = Factory.MyWidget(rgb=[0,0,1]) 
widget.add_widget(myWidget1) 
widget.add_widget(myWidget2) 
widget.add_widget(myWidget3) 

Как я могу сделать это лучше?

+0

Что именно здесь не так? Проблемы включают в себя то, что вы не объявляете свойство rgb, и что неясно, когда вы создаете экземпляры виджета (которые могут быть или не быть после их загрузки kv). – inclement

+0

Проблема в том, что то, что я написал выше, не работает, я был бы признателен, если вы напишете мне, как это сделать. – wpbloger

+0

Wen задает вопрос, вы должны указать не только, что он не работает, но и как он не работает - он работает, но делает то, чего вы не ожидаете? Это крушение? Как он падает? Вы получили сообщение об ошибке? Кроме того, это хорошая форма для обеспечения возможного запуска. – inclement

ответ

1

Как сказано выше, проблема в том, что MyWidget не имеет атрибута 'rgb' (также не имеет BoxLayout).

В файле python вам необходимо создать класс с этим атрибутом. В частности, вы должны создать атрибут ListProperty, чтобы все автоматическое связывание на стороне kv произошло.

from kivy.properties import ListProperty 
from kivy.uix.boxlayout import BoxLayout 

class MyWidget(Boxlayout): 
    rgb = ListProperty([0,0,0]) 
Смежные вопросы