python - 怎么修在列表 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
请帮我
解决方案
您的代码有两个问题。
首先,使用on_parent
事件会导致该代码被执行两次(一次parent
初始化为None
,一次parent
设置为testApp
窗口)。这就是为什么您会看到 4 个项目而不是 2 个。您可以使用该on_kv_post
事件让它只发生一次。
其次,list
您创建的 包含类属性,numberx
并且numbery
. 但是虽然Properties
是在类级别定义的,但它们实际上是实例属性,因此该列表包含错误的对象。要解决这个问题,您可以将其定义list
为ReferenceListProperty
,或通过在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) ))
推荐阅读
- git - 同步两个已经发散的分支
- java - AES:在 Java 中使用 ECB 模式加密
- typescript - 如何在 Vue3/Ts 中使用 vue-unit-test + jest
- angular - 如何将自定义主题添加到 Ionic 5 应用程序?
- c++ - 为什么我不能通过 Eclipse CDT4 打开 Qt5 应用程序?
- xml - 使用 TwinCAT 读写 xml 文件失败
- c# - 用于 3 个一对一关系的 Dapper MultiMapping
- sql - 我可以在 Oracle SQL 报告中使用定义吗?
- spring-cloud-gateway - Spring Cloud 网关 - io.netty.util.internal.OutOfDirectMemoryError
- android - 我在android studio中遇到了这个问题。我已经下载了链接中提到的文件,将这些文件粘贴到哪里