Kivy kv 文件不工作

Kivy kv file is not working

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

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

解决方法: 将 build 定义为

def build(self):
    pass

将kv文件中ScreenManagement的定义改为

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

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

您还可以添加:

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 做同样的事情。

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