为什么在 kivy 中调整大小会带回旧位置的小部件?

Why does resizing in kivy brings back widgets in old positions?

我正在 kivy 中制作游戏,当我关闭屏幕 (android) 或尝试调整 window (linux) 一些我移动的小部件时离开屏幕 return 到他们的起始位置。 我为此创建了一个最小的可重现示例:

example.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class GameCanvas(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def start(self):
        # move the label widget far away
        self.children[0].pos = 10000, 10000

class Example(App):
    pass

if __name__ == '__main__':
    Example().run()

example.kv

GameCanvas:

<GameCanvas>:
    Button:
        text: 'Start Game'
        size: root.width, root.height / 2
        on_release: root.start()

    Label:
        text: 'Game Title'
        size: root.width, root.height / 2

按下按钮之前:

按下按钮后:

调整大小后:

正如所附图片所示,在我按下按钮后标签 'disappears'(移动位置)但是当我尝试调整 Window 的大小时它又回来了。

为什么会这样?另外为什么它也发生在 android 上?是不是跟基维的什么事情有关?

提前致谢!

您看到的行为是 BoxLayout 的预期行为。 BoxLayout 定位其 children。因此,您可以移动 Label,但一旦 BoxLayout 有机会(如在大小更改事件中),它就会按预期定位其 children。如果你想控制 children 小部件的位置,那么你应该使用不定位其 children 的 Layout,可能是 FloatLayoutRelativeLayout