首页 > 解决方案 > 在 add_widget 方法中访问小部件属性

问题描述

我想制作一组自定义的小部件,其中一些我想访问方法内的add_widget(widget, index, canvas)特定小部件的属性。

问题是属性总是空的。这可能是因为我提前访问了它们,但我该如何解决呢?

我的代码:

from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.uix.label import MDLabel
from kivymd.app import MDApp


class CustomWidget(BoxLayout):

    def add_widget(self, widget, index=0, canvas=None):
        if isinstance(widget, MDLabel):
            # Why is the text empty?
            # Also how can I get the text value?
            print("{}'s text is: {}".format(widget, widget.text))
        else:
            super(CustomWidget, self).add_widget(widget, index, canvas)


class MainApp(MDApp):
    def __init__(self, **kwargs):
        super(MainApp, self).__init__(**kwargs)
        self.kv = Builder.load_string('''
#:kivy 2.0.0
CustomWidget:
    MDLabel:
        text: "Some text"
''')

    def build(self):
        return self.kv


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

标签: pythonpython-3.xkivykivy-languagekivymd

解决方案


该文本是空的,因为它在添加到父级时尚未设置。

如果您关心它的值更改为什么,您可以绑定到新的子小部件的text属性,add_widget以便在它发生更改时通知您并采取相应的行动。


推荐阅读