bind, текст метки в файле kv к методу в файле python - PullRequest
1 голос
/ 31 марта 2020

Я хочу привязать функцию в файле .kv к методу в файле .py простыми словами. Я хочу обновлять кавычки каждый день на главном экране моего приложения, поэтому я использовал экранный виджет для отображения кавычек, поэтому как мне это сделать? привязать label.text к методу в файле .py вот класс файла .py, который я хочу связать

class MainScreen(FloatLayout):
    def quote(self):
        self.quote.text = 'I often think that the night is more alive and more richly colored than 
                             the day. - Vincent van Gogh'

вот виджет root файла .kv

    <MainScreen>:
        story: story

        canvas:
            Color:
                rgba: 0, 0, 0, 1
            Rectangle:
                pos: self.pos
                size: self.size

        Label:
            id: story
            text: root.quote
            font_size: '20sp'
            size: self.texture_size
            pos_hint: {'x': -0.2, 'y': 0.27}

но он показывает ошибку, говоря, что label.text должен быть строкой

1 Ответ

0 голосов
/ 31 марта 2020

Вы можете сделать это, используя kivy Property и метод quote(), чтобы обновить Property. Вот способ сделать это в вашем коде:

class MainScreen(FloatLayout):
    quote_text = StringProperty('Not Set')

    def quote(self, *args):
        self.quote_text = 'I often think that the night is more alive and more richly colored than  the day. - Vincent van Gogh'

quote_text - это StringProperty, на который можно ссылаться в kv, а метод quote теперь обновляет это StringProperty .

А в вашем kv:

<MainScreen>:
    story: story

    canvas:
        Color:
            rgba: 0, 0, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size

    Label:
        id: story
        text: root.quote_text
        font_size: '20sp'
        size: self.texture_size
        pos_hint: {'x': -0.2, 'y': 0.27}

Затем, вызов метода quote() обновит текст Label. Чтобы проверить это, вы можете использовать build() метод вашего App как:

def build(self):
    main = MainScreen()
    Clock.schedule_once(main.quote, 5)
    return main
...