Файл .kv не загружается в python - PullRequest
0 голосов
/ 28 апреля 2020
    #: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 с модулем kivy И все, что я получаю в окне kivy, это экран blavk, так что, возможно, файл просто никогда не загружается. Заранее спасибо

1 Ответ

0 голосов
/ 28 апреля 2020

Ваш .kv файл не содержит root правил , только правила класса. <class>: - это правило класса, class: - это root правило.

Это означает, что kivy действительно загружает ваш файл kv, но файл kv говорит только «если вы столкнулись с myManager класс, стиль это так. " Вы можете добавить правило root или вернуть виджет root вручную.

root rule:

myManager:
    connPage:
    myGame:

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

вернуть root виджет в коде:

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

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

Существует еще одна проблема:

myManager:
    connPage:
    myGame:

Все классы строчные, поэтому kivy будет анализировать connPage: как добавление свойства к myManager с именем connPage и значением None (то же самое для myGame:). Чтобы обойти это название все классы прописными. Это легко пропустить, так как это действительно обсуждается только в небольшой заметке . Обычно python поощряет следовать руководству по стилю pep8 - хотя обычно это чисто стиль и не меняет смысла и поведения вашего кода, для файлов kv важно различать guish между свойствами (атрибутами) и дочерними (виджетами). Таким образом, правило root должно выглядеть следующим образом:

myManager:
    ConnPage:
    MyGame:

<ConnPage>:
    ...

и классы должны иметь соответствующие имена.

class ConnPage(Screen):
    pass

class MyGame(Screen):
    pass
...