如何修复列表 python kivy 中的 <NumericProperty name=>?

How to fix <NumericProperty name=> in list python kivy?

我试图让 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

请帮帮我

你的代码有两个问题。

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

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

这是您的 testApp class 的修改版本,它使用 ReferenceListProperty:

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

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

#: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) ))