2014-07-13 3 views
1

저는 python 및 kivy를 처음 사용합니다. 나는 작은 게임을 시도하고 있는데, 시작 자체에 부딪혔다. 나는 플로트 레이아웃을 사용하고, 위젯을 위에서 아래로 떨어 뜨린다. 위젯 크기는 (0.1,0.1)이고, 움직임의 애니메이션은 옵션으로 픽스를 취할 것이고, 어떻게 레이아웃의 x와 y 코너 픽셀의 최대 한계를 알 수 있습니까? 나는 플로트 레이아웃의 픽셀 수를 알고 싶습니다. dp (value) from Module : kivy.metrics, 그러나 그것은 단지 0,0으로 보여주고 있습니다.플로팅 레이아웃의 애니메이션 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

레이아웃 위젯의 기본값 인 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을 놓치지 마세요.

+0

코드로 위젯 크기를 (0.5,0.5)로 유지하면 위젯을 이동할 수있는 실제 크기를 알 수 없지만 위젯 크기는 찾을 수 있지만 위젯은 찾을 수 없습니다. 이 일을 끝내는 방법이 있습니까? 저와 함께 맨발로, 나는 VB.net WPF에서 왔습니다. 그래서 파이썬과 키비는 모두 새로운 것이지만 가능한 빨리 배우는 것입니다. – surpavan

+0

@surpavan'[800, 600]'크기는 부모 창 크기로 자동으로 크기가 조정 된 후의'Test' 위젯의 실제 최종 크기입니다. 예제에서'Test' 위젯 크기 힌트를 (0.5, 0.5)로 설정하면, 윈도우 크기의 절반으로 만 크기가 조정되고 결과에는'[400.0, 300.0]'이 표시됩니다. – famousgarkin

+0

그러나 매번 크기가 변경되면 어떻게 px를 기반으로 애니메이션을 프로그래밍 할 수 있습니까? 시작시 px 값은 시작 후 값과 다릅니다. 레이아웃과 위젯 크기 및 위치에 대한 더 좋은 기사가 있다면 goo라고 생각합니다. kivy 문서는 분명하지만 설명이 아닙니다. 고맙습니다. – surpavan

관련 문제