如何从 python 代码文件中为 kivy 中的小部件设置 ID

How to set id for widgets in kivy from python code file

class NavigationDrawer(MDApp):
def build(self):
    return Builder.load_string(KV)

def on_start(self):

    files=[{"price":"890" , "meter" : "36" , "elevator" : "True"}]

    for file in files:
        first_base_el = MDCard(size_hint=(1, None), size=(self.root.width,
              self.root.height / 4))
        second_base_el =BoxLayout(orientation='vertical')

        for element in file.keys() :

            external_el = MDRectangleFlatButton(
                    text=f'{element} : {file[element]}',
                    size_hint=(1, .2)
            )

            second_base_el.add_widget(external_el)

        first_base_el.add_widget(second_base_el)
        self.root.ids.container.add_widget(first_base_el)

I get this error : self.ids[element] = weakref.ref(external_el) AttributeError: 'NavigationDrawer' object has no attribute 'ids'

是的,这是因为不在行 self.root.ids.container.add_widget(first_base_el) 中,self 指的是 AppClass,然后您访问的是应用类本身的根。

AppClass 没有任何属性ids。只有小部件 类 将具有 ids 属性以访问

从 python 代码分配的“id”不能用作 kivy lang 的“id”,引用从 python 代码添加的小部件的最佳方法是使用“children " 或 "parent" 属性并从小部件树中获取正确的小部件,并通过调用或对象使用它

在您的示例中,“first_base_el”包含您添加的小部件,因此要获取您已添加的小部件,您应该使用:

B=first_base_el.children

Card=B[0] #this 等于“second_base_el”小部件