В моем KV-файле есть правило для класса, который мы назовем Foo, который наследуется от класса Widget, экземпляры которого я создаю в своем файле python: (большинство несущественных деталей было удалено)
В python:
Class Foo(Widget):
x_coord = NumericProperty()
y_coord = NumericProperty()
В Kv:
<Foo>:
pos: self.x_coord + self.parent.bar, self.y_coord() + self.parent.barbar
Однако, когда я создаю экземпляр класса:
new_foo = Foo()
new_foo.x_coord = 7
new_foo.y_coord = 10
[do some more stuff with it]
<a parent widget>.add_widget(new_foo)
, я получаю сообщение об ошибке type object NoneType has no attribute bar
Мне кажется, что файл KV пытается применить правило, как только создается экземпляр класса, но у него еще нет родителя, потому что он ни к чему не добавлен.Я даже попытался добавить временный подкласс под названием parent в Foo, который имел рабочие значения для всех свойств, на которые я ссылался, и это действительно остановило ошибку, но я сразу же получил новый, так как kivy не смог перезаписать временный класс, чтобы добавить фактического родителя.
Как мне обойти это?Есть ли способ передать родителя в качестве аргумента?Или я должен вместо этого написать правило на python и поместить его в init для класса Foo?