Я столкнулся с этой проблемой несколько раз, поэтому либо мой подход ошибочен, либо я пропустил критическую функцию.Принудительная компоновка киви внутри __init__
Зачастую мне нужно установить начальную графическую информацию в методе init. Это не работает, потому что когда сначала создаются графические киви, они находятся на pos:0, 0
и size:100, 100
. Так что любая настройка в init не выглядит корректной.
Есть ли способ заставить киви размещать в виджетах init? Я вижу do_layout
, но не понял, как добраться до макета, чтобы попробовать.
Вот пример:
Python:
class Main(Widget):
route = ListProperty([])
def __init__(self, *args, **kwargs):
super(Main, self).__init__(**kwargs)
self.route = [0, 0, self.width, self.height]
class RouteBuilderApp(App):
def build(self):
main = Main()
return main
if __name__ == "__main__":
RouteBuilderApp().run()
Kv:
<Main>
canvas:
Color:
rgb: 0, 0, 0
Rectangle:
size: self.size
pos: self.pos
Color:
rgb: 0, 0, 1
Line:
points: root.route
width: 2
Выход:
Мой пример может быть упрощен, но я не думаю, что вы действительно ответили на мой вопрос. Возможно ли запустить раскладку? – danatron
Вы не используете '' Layout'' в своем коде выше. Вы можете запускать макет на виджетах «Макет», но вне расширенного использования это обычно означает, что вы сделали что-то еще неправильно. –