2016-06-29 30 views
3

Ich habe das gleiche Problem wie in diesem Thema beschrieben kv incorrect. Wenn ich Builder verwende und die kv-Datei lade, habe ich eine normal funktionierende App. Aber wenn ich versuche, autoload KV-Datei zu verwenden, habe ich nur einen schwarzen Bildschirm. Könnte mir jemand erklären warum? Danke für jede Hilfe.Kivy KV-Datei funktioniert nicht

Mein Code. 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-Datei. 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 

Antwort

2

In Ihrer kv Datei definieren Sie ScreenManagement das Wurzelelement mit den damit verbundenen Bildschirmen zu sein. Aber unter build geben Sie ein neu erstelltes Objekt ScreenManagement zurück, für das keine untergeordneten Objekte definiert sind.

Lösung: definieren build als

def build(self): 
    pass 

oder Änderung der Definition von ScreenManagement in der kv-Datei

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

so wird dies zu alle neuen ScreenManagement Objekte anwenden.

+0

Danke zeeMonkeez. Sie haben mir sehr geholfen. Sorry für triviale Frage. – Velidan

+0

@Velidan es ist eine Subtilität leicht zu übersehen, und daher eigentlich eine nützliche Frage. Ich brauchte einen Moment um herauszufinden ... – zeeMonkeez

0

können Sie auch hinzufügen:

class ScreenManagement(ScreenManager): 
    pass 

dazu

:

from kivy.properties import ObjectProperty 

dann ändern

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

dann in Ihrer .kv Datei, die Sie dies ändern möchten:

ScreenManagement: 
    transition: FadeTransition() 
    MainScreen: 
    AnotherScreen: 

dazu:

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

dann für Ihren Mainscreen hinzufügen und id wie folgt:

<MainScreen>: 
    id: mainscreen 

und für Sie AnotherScreen das gleiche tun.