2016-06-29 13 views
3

이 주제에 설명 된 것과 같은 문제가 있습니다. kv incorrect. 빌더를 사용하고 kv 파일을로드 할 때 나는 정상적으로 작동하는 응용 프로그램을 가지고 있습니다. 그러나 내가 자동로드 kv 파일을 사용하려고 할 때 나는 검은 색 화면만을 가지고있다. 누군가 내가 왜 설명 할 수 있을까요? 어떤 도움을 주셔서 감사합니다.Kivy kv 파일이 작동하지 않습니다.

내 코드. main.py

import kivy 
kivy.require('1.9.1') # replace with your current kivy version ! 

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition 


class MainScreen(Screen): 
    pass 


class AnotherScreen(Screen): 
    pass 


class ScreenManagement(ScreenManager): 
    pass 


class Test(App): 

    def build(self): 
     return ScreenManagement() 

if __name__ == "__main__": 
    Test().run() 

kv 파일 당신의 kv 파일에서 test.kv

#:kivy 1.9.1 

#: import FadeTransition kivy.uix.screenmanager.FadeTransition 

ScreenManagement: 
    transition: FadeTransition() 
    MainScreen: 
    AnotherScreen: 

<MainScreen>: 
    name: "main" 
    Button: 
     on_release: app.root.current = "other" 
     text: "Next Screen" 
     font_size: 50 

<AnotherScreen>: 
    name: "other" 
    Button: 
     on_release: app.root.current = "main" 
     text: "Prev Screen" 
     font_size: 50 

답변

2

, 당신은 관련 스크린 루트 요소로 ScreenManagement을 정의합니다. 그러나 build에서 새롭게 생성 된 ScreenManagement 개체를 반환합니다.이 개체는 자식을 정의하지 않습니다.

솔루션 : 이

<ScreenManagement>: 
    transition: FadeTransition() 
    MainScreen: 
    AnotherScreen: 

build

def build(self): 
    pass 

또는 변화에게 KV 파일 ScreenManagement의 정의를 정의 그래서이 모든 새로운 ScreenManagement 객체를 적용합니다.

+0

감사합니다. zeeMonkeez. 너 나 많이 도와 줬어. 사소한 질문에 사과드립니다. – Velidan

+0

@Velidan 그리 쉽지 않은 미묘한 부분이므로 실제로 유용한 질문입니다. 알아내는 데 시간이 좀 걸렸어. – zeeMonkeez

0

당신은 또한 추가 할 수 있습니다

from kivy.properties import ObjectProperty 

다음 변경 :

class ScreenManagement(ScreenManager): 
    pass 

을 여기에 : 다음

class ScreenManagement(screenManager): 
    mainscreen = ObjectProperty(None) 
    anotherscreen = ObjectProperty(None) 

당신의 .kv 파일이 변경하려면 :

ScreenManagement: 
    transition: FadeTransition() 
    MainScreen: 
    AnotherScreen: 
이에

: 당신의 MainScreen에 대한

다음
<ScreenManagement>: 
    transition: FadeTransition() 
    mainscreen: mainscreen 
    anotherscreen: anotherscreen 

추가 및 ID과 같이 :

<MainScreen>: 
    id: mainscreen 

하고 AnotherScreen을 위해 동일한 작업을 수행.

관련 문제