Kivy kv文件无效

时间:2016-06-29 20:06:27

标签: python kivy kivy-language

我遇到了与此主题kv incorrect中描述的问题相同的问题。当我使用Builder并加载kv文件时,我有正常工作的应用程序。但是当我尝试使用autoload 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文件。 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

3 个答案:

答案 0 :(得分:2)

kv文件中,您将ScreenManagement定义为具有关联屏幕的根元素。但是在build中,您将返回一个新创建的ScreenManagement对象,该对象不会定义任何子项。

解决方案: 将build定义为

def build(self):
    pass

将kv文件中ScreenManagement的定义更改为

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

所以这将适用于所有ScreenManagement个对象。

答案 1 :(得分: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

并为你做同样的事情。

答案 2 :(得分:0)

检查您的Python版本和您使用的Pygame版本。我遇到了这个问题,而我的问题来自Pygame的版本。