我多次遇到这个问题,所以我的方法不对或错过了一个关键功能。
通常,我最终需要在小部件init方法中设置初始图形信息。这不起作用,因为首次创建kivy图形时,它们位于pos:0, 0
和size:100, 100
。所以init中的任何设置看起来都不正确。
有没有办法强制kivy在小部件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
输出:
答案 0 :(得分:1)
您需要使用属性绑定。这在kv语言中非常简单,你可以像这样改变你的kv:
canvas:
Color:
rgb: 0, 0, 0
Rectangle:
size: self.size
pos: self.pos
Color:
rgb: 0, 0, 1
Line:
points: 0, 0, root.width, root.height
width: 2
通过直接绑定Line
的点,您甚至不需要中间route
属性。