强制kivy布局在\uu init内__

2024-09-28 21:08:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经多次遇到这个问题,所以要么我的方法错误,要么我错过了一个关键特性。在

通常,我需要在widgets init方法中设置初始图形信息。这不起作用,因为当kivy图形第一次被创建时,它们位于pos:0, 0和{}。所以init中的任何设置看起来都不正确。在

有没有办法强迫kivy在widgets 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()

千伏:

^{pr2}$

输出:

enter image description here


Tags: 方法self图形initmaindef错误布局
1条回答
网友
1楼 · 发布于 2024-09-28 21:08:58

您需要使用属性绑定。这在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属性。在

相关问题 更多 >