【问题标题】:How to fix <NumericProperty name=> in list python kivy?如何修复列表 python kivy 中的 <NumericProperty name=>?
【发布时间】:2025-12-15 03:20:19
【问题描述】:

我试图让 kivy 显示我的列表。 这是我用于测试的简单 python 代码:

class test(BoxLayout):
    pass

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

    list = [numberx,numbery]

testApp().run()

这是我的 kv 文件:

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

<test>:
    orientation: 'vertical'
    on_parent: for x in app.list: self.add_widget(Label(text = str(x) ))

This is the output

输出显示:

NumericProperty name=numberx

NumericProperty name=numbery

NumericProperty name=numberx

NumericProperty name=numbery

但我希望它显示:

10

5

请帮帮我

【问题讨论】:

    标签: python list kivy kivymd


    【解决方案1】:

    您的代码有两个问题。

    首先,使用on_parent 事件会导致代码执行两次(一次在parent 初始化为None 时,一次在parent 设置为testApp 窗口时)。这就是为什么您会看到 4 个项目而不仅仅是 2 个。您可以使用 on_kv_post 事件让它只发生一次。

    其次,您创建的list 包含类属性numberxnumbery。但是虽然Properties 是在类级别定义的,但它们实际上是实例属性,因此该列表包含错误的对象。要解决此问题,您可以将 list 定义为 ReferenceListProperty,或在 testApp 实例中定义它(可能在 __init__() 方法中),以便使用实例属性。

    这是使用 ReferenceListPropertytestApp 类的修改版本:

    class testApp(App):
        numberx = NumericProperty(10)
        numbery = NumericProperty(5)
        list = ReferenceListProperty(numberx, numbery)
    

    这是您的kv 的修改版本,它使用on_kv_post 事件:

    #:import Label kivy.uix.label.Label
    test:
    
    <test>:
        orientation: 'vertical'
        on_kv_post:
            for x in app.list: self.add_widget(Label(text = str(x) ))
    

    【讨论】:

    • 对我帮助很大!非常感谢先生的帮助