.kv文件在python中无法加载。

问题描述 投票:0回答:1
    #:kivy 1.11.1 

    <myManager>:
        connPage:
        myGame:

    <connPage>:
        name: "main"

        GridLayout:
            cols: 1

            GridLayout:
                cols: 2

                Label:
                    text: "Password: "

                TextInput:
                    id: password
                    multiline: False

            Button:
                text: "Submit"
                on_release:
                    app.root.current = "mygame"

    <myGame>:
        name: "mygame"

        Button:
            text: "Go back"
            on_release:
                app.root.current = "main"

    -----------------------------------------------------------------------------------------------------
    import kivy
    from kivy.app import App
    from kivy.uix.gridlayout import GridLayout
    from kivy.uix.label import Label
    from kivy.uix.textinput import TextInput 
    from kivy.uix.widget import Widget 
    from kivy.uix.button import Button
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.clock import Clock
    from kivy.core.window import Window
    from kivy.uix.scrollview import ScrollView
    from kivy.lang import Builder
    import os
    import sys

    kivy.require("1.11.1")

    class connPage(Screen):
        pass

    class myGame(Screen):
        pass

    class myManager(ScreenManager):
        pass

    kv = Builder.load_file("stylesheet.kv")

    class MyApp(App):
        def build(self):
            return kv

    if __name__ == "__main__":
        MyApp().run()


    ____________________________________________________________________________________________________

python python-3.x kivy kivy-language
1个回答
0
投票

你的 .kv 文件不包括任何 根规,只有类规则。<class>: 是一个类规则。class: 是一个根规则。

这意味着kivy 是否 加载你的kv文件,但kv文件只说 "如果你遇到一个 myManager 类,样式是这样的。"。您可以添加一个根规则或手动返回根部件。

根规则。

myManager:
    connPage:
    myGame:

<connPage>:
    name: "main"
    ...

在代码中返回根部件

kv = Builder.load_file("stylesheet.kv")

class MyApp(App):
    def build(self):
        return myManager()

还有一个问题

myManager:
    connPage:
    myGame:

这些类都是小写的,所以kivy会解析出 connPage: 如同给 myManager 有名字 connPage 和价值 None (同样适用于 myGame:). 为了规避这个名称,所有的类都大写。这一点很容易被忽略,因为它只在 小纸条. 一般来说,python鼓励遵循 蛋白质8 样式指南--通常这只是纯粹的样式,不会改变代码的意义和行为,但对于kv文件来说,区分属性(属性)和子代(部件)是很重要的。所以根规则应该是这样的。

myManager:
    ConnPage:
    MyGame:

<ConnPage>:
    ...

而类的名字也应该相应地命名。

class ConnPage(Screen):
    pass

class MyGame(Screen):
    pass
© www.soinside.com 2019 - 2024. All rights reserved.