【问题标题】:Kivy kv file is not workingKivy kv 文件不工作
【发布时间】:2016-06-29 20:06:27
【问题描述】:

我遇到了与此主题 kv incorrect 中描述的相同的问题。当我使用 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 文件。测试.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

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

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

    解决方案: 将build 定义为

    def build(self):
        pass
    

    将kv文件中ScreenManagement的定义改为

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

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

    【讨论】:

    • 谢谢 zeeMonkeez 。你帮了我很多。很抱歉提出一个琐碎的问题。
    • @Velidan 这是一个很容易被忽略的微妙之处,因此实际上是一个有用的问题。我花了一点时间才弄清楚......
    【解决方案2】:

    您还可以添加:

    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
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        相关资源
        最近更新 更多