为什么在 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
,可能是 FloatLayout
或 RelativeLayout
我正在 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
,可能是 FloatLayout
或 RelativeLayout