2016-06-29 13 views
3

私はこのテーマで説明したのと同じ問題がありますkv incorrect。私がBuilderを使用してkvファイルをロードするとき、私は通常の作業アプリを持っています。しかし、私がautoload 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オブジェクトを返します。子オブジェクトは定義されていません。

ソリューション: はbuildので、これはすべて新しいScreenManagementオブジェクトに適用されます

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

にKVファイル内ScreenManagementの定義を変更

def build(self): 
    pass 

または

ように定義します。

+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: 
その後、

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

ごMainScreenのための追加とidそうのように:これまで

<MainScreen>: 
    id: mainscreen 

、あなたAnotherScreenのために同じことを行います。

関連する問題