Kivy ObjectProperty для обновления текста метки

Я работаю над созданием пользовательского интерфейса kivy для отображения значений, сгенерированных моделью данных, которую я написал как стандартный объект python. По сути, я бы хотел, чтобы пользователь мог нажать кнопку, которая изменит базовую модель данных, и результаты этого изменения будут автоматически обновляться и отображаться. Насколько я понимаю, это можно реализовать с помощью свойств kivy (в данном случае, ObjectProperty).

Вот пример кода:

import kivy
kivy.require('1.7.0')

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
from kivy.lang import Builder

Builder.load_string("""
<RootWidget>:
    cols: 2
    Label:
        text: "Attribute a:"
    Label:
        text: root.data_model.a
    Label:
        text: "Attribute b:"
    Label:
        text: root.data_model.b
    Label:
        text: "Attribute c:"
    Label:
        text: root.data_model.c
    Button:
        text: "Make data_model.a longer"
        on_press: root.button_press()
    Button:
        text: "Make data_model.b shorter"
        on_press: root.button_press2()
""")


class DataModel(object):
    def __init__(self):
        self.a = 'This is a'
        self.b ='This is b'

    @property
    def c(self):
        return self.a + ' and ' + self.b

class RootWidget(GridLayout):
    data_model = ObjectProperty(DataModel())

    def button_press(self, *args):
        self.data_model.a = 'This is a and it is really long now'
        print self.data_model.c

    def button_press2(self, *args):
        self.data_model.b = 'B'
        print self.data_model.c

class TestApp(App):
    def build(self):
        return RootWidget()

app = TestApp()
app.run()

Желаемый результат - когда пользователь нажимает любую кнопку, метки автоматически обновляются, показывая новые свойства. Как видно из операторов печати, data_model корректно обновляется. Тем не менее, ни один из ярлыков не обновляется. Может кто-нибудь уточнить, как это сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос