2 класса, на которые есть ссылки в kivy, возвращают пустой экран - PullRequest
0 голосов
/ 11 октября 2018

Как предложено в моей последней теме, я задаю вопрос, потому что проблема изменилась.Теперь у меня есть код Python перед сборщиком, и теперь я показываю пустой экран в цвете wordApp

. Я использую 2 класса, определенных в одном файле Python.Я хочу сослаться на них внутри builder.load_string, чтобы их содержимое отображалось на соответствующем экране.

Любая помощь будет принята с благодарностью, поскольку я близок к завершению своего проекта.

class Word(Widget):

    def __init__(self, **kwargs):
        self.textlabel = Label(text="labeltext", pos=(300, 300))
        self.add_widget(self.textlabel)

    def gonext(self ,btn_inst):
        sm.current = "settings"

class MenuScreen(Screen):
    pass

class SettingsScreen(Screen):
    pass

class Favorites(Screen):
    pass

class ScreenManager(ScreenManager):
    pass

sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
sm.add_widget(Favorites(name='favs'))

class WordApp(App):

    def build(self):
        Window.clearcolor = (1,0,0.3,1)
        return sm

if __name__ == '__main__':
    WordApp().run()


class WordFile(Widget):

    def __init__(self, **kwargs):
        self.textlabeldef = Label(text="labeltextdef", pos=(300, 100))
        self.add_widget(self.textlabeldef)


class WordFileApp(App):
    def build(self):
        Window.clearcolor = (0,1,0.3,1)
        return sm

 Builder.load_string("""
 #:kivy 1.9.0


<MenuScreen>:
    Word:
        Button:
            text: 'change word'
            font_size: 30
            width: root.width
            center_x: 400
            center_y: root.width / 2


<SettingsScreen>:
    WordFile:
        Label:
            width: root.width
            height: 30
            top: root.height 
            id: entry
            text:"ac"
            font_size:18
            multiline:True
            center_x: root.width/2
            canvas.before:
                Color:
                    rgba: 1, 0, 1, 1
                Rectangle:
                    pos: self.pos
                    size: self.size

<Favorites>:
    Word:     
""")

1 Ответ

0 голосов
/ 11 октября 2018

В вашем коде много ошибок:

class ScreenManager(ScreenManager):
    pass
  • Это ничего не делает
  • Вы объявляете некоторые классы, которые используете, после началаприложения
  • Вы создали и создали два Приложения
  • В части kv нет правила WordFile, хотя вы используете его
  • Некоторыеклассы ошиблись __init__
  • Может быть, больше, что я забыл: о)

Это код, который работает:

from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.widget import Widget


Builder.load_string("""
 #:kivy 1.9.0


<MenuScreen>:
    Word:
        Button:
            text: 'change word'
            font_size: 30
            width: root.width
            center_x: 400
            center_y: root.width / 2


<SettingsScreen>:
    WordFile:
        Label:
            width: root.width
            height: 30
            top: root.height 
            id: entry
            text:"ac"
            font_size:18
            multiline:True
            center_x: root.width/2
            canvas.before:
                Color:
                    rgba: 1, 0, 1, 1
                Rectangle:
                    pos: self.pos
                    size: self.size

<Favorites>:
    Word:

<WordFile>:

""")


class SettingsScreen(Screen):
    pass


class Favorites(Screen):
    pass


class MenuScreen(Screen):
    pass


class Word(Widget):
    def __init__(self, **kwargs):
        super(Word, self).__init__(**kwargs)
        self.textlabel = Label(text="labeltext", pos=(300, 300))
        self.add_widget(self.textlabel)

    def gonext(self, btn_inst):
        sm.current = "settings"


class WordFile(Widget):

    def __init__(self, **kwargs):
        super(WordFile, self).__init__(**kwargs)
        self.textlabeldef = Label(text="labeltextdef", pos=(300, 100))
        self.add_widget(self.textlabeldef)


sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
sm.add_widget(Favorites(name='favs'))


class WordApp(App):

    def build(self):
        Window.clearcolor = (1, 0, 0.3, 1)
        return sm


if __name__ == '__main__':
    WordApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...