如何修复列表 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 属性、numberx
和 numbery
。但是,虽然 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) ))
我试图让 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 属性、numberx
和 numbery
。但是,虽然 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) ))