【问题标题】:Access widget properties inside of add_widget method在 add_widget 方法中访问小部件属性
【发布时间】:2021-09-20 16:30:07
【问题描述】:

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

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

我的代码:

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()

【问题讨论】:

    标签: python python-3.x kivy kivy-language kivymd


    【解决方案1】:

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

    如果您关心其值的变化,您可以绑定到 add_widget 中的新子小部件的 text 属性,以便在它发生变化时通知您并采取相应措施。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多