在这个例子中,来自Kivy文档的ObjectProperty背后的想法是什么?

时间:2015-12-01 13:41:32

标签: python kivy

我真的想要得到Kivy的概念。我知道它是强大而有用的,但对于我来说,在某些方面也难以理解,至少在here中给出的例子。在“使用Kivy语言进行设计”一节中,我找到了以下示例:

Python的文件

from kivy.uix.floatlayout import FloatLayout
from kivy.app import App
from kivy.properties import ObjectProperty, StringProperty

class Controller(FloatLayout):
    ''' Create a controller that receives a custom widget from the kv lang file.
    Add an action to be called from the kv lang file.    '''
    # label_wid = ObjectProperty()
    info = StringProperty()

    def do_action(self):
        self.label_wid.text = 'My label after button press'
        self.info = 'New info text'

class ControllerApp(App):
    def build(self):
        return Controller(info='Hello world')

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

controller.kv

<Controller>:
    label_wid: my_custom_label

    BoxLayout:
        orientation: 'vertical'
        padding: 20

        Button:
            text: 'My controller info is: ' + root.info
            on_press: root.do_action()

        Label:
            id: my_custom_label
            text: 'My label before button press'

与原版有一些小的偏差:我在#label_wid = ObjectProperty()一行注释,试图了解它背后的想法,期望代码不能运行。但它正在运行!那么对Kivy有更好理解的人会如此善意地解释,为什么这行代码是有用的(可能至少出于教育原因),如果还没有要求(在任何情况下,我都不知道)?

1 个答案:

答案 0 :(得分:1)

当你为一个不存在的属性添加一个kv行时,会自动创建它,因此在这种情况下kv实际上与在python中放置label_wid = ObjectProperty()相同。但是,在Python中添加属性更明确(特别是如果您将从python访问它)并且让您确定将创建正确类型的属性。