【问题标题】:Why does resizing in kivy brings back widgets in old positions?为什么在 kivy 中调整大小会带回旧位置的小部件?
【发布时间】:2021-09-28 12:01:08
【问题描述】:

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

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

按下按钮前:

按下按钮后:

调整大小后:

正如我按下按钮后所附图像显示的那样,标签“消失”(移动位置)但是当我尝试调整窗口大小时它又回来了。

为什么会这样?另外为什么它也会发生在android上?是不是跟 kivy 中的某些事件有关?

提前致谢!

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    您看到的行为是BoxLayout 的预期行为。 BoxLayout 定位其子级。因此,您可以移动Label,但只要BoxLayout 有机会(如在大小更改事件中),它就会按预期定位其子项。如果要控制子小部件的位置,则应使用不定位其子小部件的Layout,可能是FloatLayoutRelativeLayout

    【讨论】:

    • 谢谢! RelativeLayout 确实不会让这种情况发生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多