如何从 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”小部件
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”小部件