You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Python Kivy列表中<NumericProperty name=>显示异常问题

问题根因

你在testApp类定义阶段就将numberx、numbery两个属性放入列表,此时这两个变量是NumericProperty类的属性对象,还未绑定到App实例,不会返回你设置的默认数值,所以遍历时输出的是属性对象本身的字符串形式。同时on_parent事件会触发两次,最终你会看到4行重复的属性对象输出。

修复方案

1. 调整Python代码

将列表构造逻辑移动到App实例初始化完成后的build方法中,此时读取的是实例属性的实际数值:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import NumericProperty

class Test(BoxLayout):
    pass

class TestApp(App):
    numberx = NumericProperty(10)
    numbery = NumericProperty(5)

    def build(self):
        # 实例化完成后再构造列表,此时取到的是实际数值
        self.list = [self.numberx, self.numbery]
        return Test()

if __name__ == "__main__":
    TestApp().run()

2. 调整KV代码

将on_parent事件替换为仅触发一次的on_kv_post事件,同时增加判断避免重复添加控件:

#:import Label kivy.uix.label.Label
Test:

<Test>:
    orientation: 'vertical'
    on_kv_post: 
        if not self.children:
            for x in app.list: self.add_widget(Label(text = str(x) ))

修改后运行即可得到你期望的10、5两行输出。

内容的提问来源于stack exchange,提问作者DanYTz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:24:00