gpt4 book ai didi

python - float 布局 KIVY 中的动画

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:48 25 4
gpt4 key购买 nike

我是 python 和 kivy 的新手。我正在尝试一个小游戏,一开始就受到了打击,我想使用 float 布局,并使小部件在其中从上到下落下。小部件大小为(0.1,0.1),移动动画将采用像素作为选项,我如何知道布局中x和y角像素的最大限制,我试图通过使用来了解 float 布局的像素数dp(value) 来自模块:kivy.metrics,但它仅显示为 0,0。

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.metrics import dp

class Test(FloatLayout):
def __init__(self, **kwargs):
super(Test,self).__init__(**kwargs)
print(dp(self.size))


class game(App):
def build(self):
return Test()

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

代码只是我如何尝试获取 dp 的示例。在不知道可能的最大像素的情况下如何移动小部件。

最佳答案

如果您没有手动指定,布局小部件的默认 Widget.size 在初始化时似乎为 (1, 1),但在小部件创建时(即 Widget.__init__)您无法从中获取任何其他大小值。

创建小部件并从 App.build 方法返回后,它会自动添加到应用程序的小部件树中,作为窗口正下方的根小部件。

当小部件添加到父级时,它也会根据相对于其父级大小的大小提示值来调整大小。默认的 Widget.size_hint 值也是 (1, 1),这使得它缩放到父级大小,在本例中为窗口大小。

只有发生这种情况后,您才能获得小部件的最终大小,例如在 App.build 之后调用的 App.on_start 方法中:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout

class Test(FloatLayout):
def __init__(self, **kwargs):
super(Test,self).__init__(**kwargs)
print(self.parent)
# None
print(self.get_parent_window())
# None
print(self.get_root_window())
# None
print(self.size)
# [1, 1]
print(self.size_hint)
# [1, 1]

class game(App):
def build(self):
print(self.root)
# None
return Test()

def on_start(self):
print(self.root)
# <__main__.Test object at 0x10a9d8a10>
print(self.root.parent)
# <kivy.core.window.window_pygame.WindowPygame object at 0x10a90d6d0>
print(self.root.get_parent_window())
# <kivy.core.window.window_pygame.WindowPygame object at 0x10a90d6d0>
print(self.root.get_root_window())
# <kivy.core.window.window_pygame.WindowPygame object at 0x10a90d6d0>
print(self.root.size)
# [800, 600]

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

所有应用程序和小部件的生命周期和行为都在 Kivy 文档中进行了描述,但它分布在指南和 API 引用之间。绝对不要错过Widget Programming Guide .

关于python - float 布局 KIVY 中的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com