3

我有这个主题kv 不正确中描述的相同问题。当我使用 Builder 并加载 kv 文件时,我有正常工作的应用程序。但是当我尝试使用自动加载 kv 文件时,我只有黑屏。有人可以解释我为什么吗?谢谢你的帮助。

我的代码。主文件

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

#: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
4

3 回答 3

2

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

解决方案:定义build

def build(self):
    pass

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

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

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

于 2016-06-29T21:39:44.227 回答
0

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

于 2020-04-13T13:09:23.343 回答
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

并为您的另一个屏幕做同样的事情。

于 2017-06-19T19:39:16.800 回答