浮动布局中的动画KIVY

时间:2014-07-13 13:38:59

标签: python python-3.x kivy

我是python和kivy的新手。我正在尝试一个小游戏,我在开始本身,我想使用浮动布局,并使小部件从上到下落入其中。小部件大小为(0.1,0.1),移动动画会将像素作为选项,如何知道布局中x和y角像素的最大限制,我试图通过使用来自Module:kivy.metrics的dp(value),但它仅显示为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的一个例子。如何在不知道可能的最大像素的情况下移动小部件。

1 个答案:

答案 0 :(得分:1)

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

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

当小部件被添加到父级时,它也会根据它相对于父级大小的大小提示值进行大小调整。默认的Widget.size_hint值也是(1,1),这使得它可以缩放到父大小,在这种情况下是窗口大小。

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

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