在列表 python kivy 中?,python,list,kivy,kivymd"/>

首页 > 解决方案 > 怎么修在列表 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) ))

这是输出

输出显示:

NumericProperty name=numberx

NumericProperty name=numbery

NumericProperty name=numberx

NumericProperty name=numbery

但我希望它显示:

10

5

请帮我

标签: pythonlistkivykivymd

解决方案


您的代码有两个问题。

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

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

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

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

推荐阅读