Python 在浮动布局KIVY中设置动画
我是python和kivy的新手。我正在尝试一个小游戏,我在开始的时候就被打中了,我想使用float布局,让小部件从上到下落下。小部件的大小是(0.1,0.1),运动动画将以像素为选项,我如何知道布局中x和y角像素的最大限制,我试图通过使用Module:kivy.metrics中的dp(值)来了解float布局的像素数,但它仅显示为0,0Python 在浮动布局KIVY中设置动画,python,python-3.x,kivy,Python,Python 3.x,Kivy,我是python和kivy的新手。我正在尝试一个小游戏,我在开始的时候就被打中了,我想使用float布局,让小部件从上到下落下。小部件的大小是(0.1,0.1),运动动画将以像素为选项,我如何知道布局中x和y角像素的最大限制,我试图通过使用Module:kivy.metrics中的dp(值)来了解float布局的像素数,但它仅显示为0,0 from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy
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,1),但在小部件创建时(即小部件。\uuu init\uuu
),您无法从中获取任何其他大小值
创建小部件并从App.build
方法返回后,它会自动添加到应用程序的小部件树中,作为窗口正下方的根小部件
当小部件被添加到父部件时,它也会根据其相对于父部件大小的大小提示值调整大小。默认的Widget.size\u hint
值也是(1,1),这使得它可以缩放到父级大小,即本例中的窗口大小
只有在这种情况发生后,您才能获得小部件的最终大小,例如在应用程序启动时调用方法,该方法在应用程序生成后调用:
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.app导入应用
从kivy.uix.floatlayout导入floatlayout
类别测试(浮动布局):
定义初始(自我,**kwargs):
超级(测试,自我)。\uuuuu初始化(**kwargs)
打印(self.parent)
#没有
打印(self.get\u parent\u window())
#没有
打印(self.get\u root\u window())
#没有
打印(自身大小)
# [1, 1]
打印(自我尺寸提示)
# [1, 1]
班级游戏(应用程序):
def生成(自):
打印(self.root)
#没有
返回测试()
def on_启动(自):
打印(self.root)
#
打印(self.root.parent)
#
打印(self.root.get\u parent\u window())
#
打印(self.root.get\u root\u window())
#
打印(self.root.size)
# [800, 600]
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
game().run()
Kivy文档中描述了所有应用程序和小部件的生命周期和行为,但它在指南和API参考之间分布得相当广泛。绝对不要错过。通过您的代码,我可以找到窗口的大小,但无法找到小部件,如果我将小部件大小保持为(0.5,0.5),那么我无法知道移动小部件的实际大小。有办法克服这一点吗。请告诉我,我来自VB.net WPF,因此python和kivy对我来说都是新手,但学习速度尽可能快。@surpavan大小[800600]
是测试
小部件自动调整到父窗口大小后的实际最终大小。如果在示例中将Test
widget size hint设置为(0.5,0.5),它的大小将仅调整为窗口大小的一半,并且在输出上会得到[400.0,300.0]
。但是,如果它每次都调整大小,如何基于px编程动画。此外,在启动时,px值与启动后的值不同。我认为如果有一篇关于布局与小部件大小和位置的更好的文章会很好,kivy文档很清楚,但不是解释性的。谢谢。还有其他方法知道吗?还有其他方法可以移动小部件吗?我想在小部件上运行一些代码,只要它知道谁是它的父母。我应该在小部件生命周期中使用什么功能?我不想在我的widget类之外使用方法,因此App类上的on_start不会这样做。。