Python/Kivy如何通过id获取控件?id与ids的区别解析
Kivy中id的引号写法差异及id与ids的区别
一、kv语言中id: 'widgetId'与id: widgetId的区别
- 不带引号的写法(
id: widgetId):这是Kivy的标准用法,会将widgetId作为字符串键名,自动添加到父控件的ids字典中。后续可通过self.ids.widgetId或self.ids['widgetId']直接访问对应控件。 - 带引号的写法(
id: 'widgetId'):这种写法不会被Kivy的ids系统正确识别,带引号的字符串不会作为键名加入父控件的ids字典。所以你用self.ids['button_create']访问时,会因字典中无对应键触发KeyError。
二、id和ids的区别
- id:是单个控件的独立属性(
widget.id),仅作为控件自身的字符串标签存在,不会自动关联到父控件的ids集合。比如你动态创建下拉项时设置的myDdi.id = 'ddi',只是给控件打了个标签,不会自动出现在父布局的ids字典里,直接用self.ids.ddi访问自然会报错。 - ids:是父控件(如你的网格布局)的字典属性,专门存储在kv语言中以标准无引号写法定义id的子控件。只有在kv里写
id: xxx(不带引号)的控件,才会被自动加入ids字典,键为xxx,值为对应控件实例。
解决你的问题的方法
- 将kv中的
id: 'button_create'改为id: button_create,即可通过self.ids.button_create正常访问该按钮。 - 对于动态创建的下拉项,若要通过
ids访问,需手动将其加入父控件的ids字典:myDdi = DropDownItem(...) myDdi.id = 'ddi' self.ids['ddi'] = myDdi # 手动添加到ids字典
内容的提问来源于stack exchange,提问作者eljamba
相关产品推荐
相关产品推荐

