Python Kivy - Обновить свойство без использования kv-языка - PullRequest
0 голосов
/ 03 августа 2020

Это мой код:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty
from kivy.clock import Clock


class MyWidget(Widget):
    score = NumericProperty(0)


class MyWindow(Widget):
    def update(self, dt):
        if self.ids.mywidget.score < 10:
            self.ids.mywidget.score += 1


class MyApp(App):
    def build(self):
        myapp = MyWindow()

        Clock.schedule_interval(myapp.update, .25)
        return myapp


MyApp().run()

kv:

<MyWindow>:
    MyWidget:
        id: mywidget

        Label:
            id: myLabel

            text: '0'
            font_size: 70
            center_x: root.width / 2
            center_y: root.height / 2

Что мне нужно изменить в моем python файле, чтобы приложение работало так же, как если бы мой kv-файл на самом деле было это:

<MyWindow>:
    MyWidget:
        id: mywidget

        Label:
            id: myLabel

            text: str(root.ids.mywidget.score)
            font_size: 70
            center_x: root.width / 2
            center_y: root.height / 2

(я хочу, чтобы текст метки изменялся всякий раз, когда изменяется свойство оценки.)

Заранее спасибо

1 Ответ

0 голосов
/ 03 августа 2020

В свой класс MyWidget добавьте такой метод, как:

def on_score(self, *args):
    self.parent.ids.myLabel.text = str(self.score)

Вышеупомянутый метод будет вызываться всякий раз, когда свойство score изменится, и соответственно изменит myLabel.

...