Kivy - 访问 .kv 文件中列表属性的元素



我已经开始用Kivy编程,Kivy是Python中令人惊叹的开源GUI库。

我遇到了一个接近这个主题的问题,但它没有令人满意的答案。

我想访问附加到我的 .kv 文件中小部件的 ListProperty 的元素,但出现错误。我想这是由于对KV语法的误解,但我无法完全弄清楚发生了什么。

更准确地说,我得到以下错误:

  • 生成器异常:解析器:在我评论过的行上(见下面的 .kv 文件(
  • 索引
  • 错误:列出索引超出范围

就好像构建器不明白我的custom_list确实有 3 个元素从 0 到 2 索引。

这是我编码的简单示例来说明这种情况:

example.py 文件

# Kivy modules
import kivy
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.app import App
from kivy.properties import ListProperty

class MyCustomLabel(Label):
custom_list = ListProperty()

class MainWidget(BoxLayout):
def generate_list(self):
l = ["Hello","Amazing","World"]
my_custom_label = MyCustomLabel()
my_custom_label.custom_list = l
self.add_widget(my_custom_label)

class MyApp(App):
pass
if __name__=="__main__":
MyApp().run()

我的.kv 文件

<MainWidget>:
orientation: "vertical"
Button:
# Aspect
text: "CLICK ME"
size_hint_y: None
height: dp(60)
# Event
on_press: root.generate_list()

<MyCustomLabel>:
## This is working
## text: "{}".format(self.custom_list)
## But this is not working... Why ?
text: "{}{}{}".format(self.custom_list[0], self.custom_list[1], self.custom_list[2])
MainWidget:

提前感谢那些花时间回答的人,

导致该问题是因为转换列表不完整,因为在更改列表之前首先它是空的,导致某些索引不存在,因此一种选择是验证它不是列表或至少具有特定大小,例如,有以下 2 个选项:

text: "{}{}{}".format(self.custom_list[0], self.custom_list[1], self.custom_list[2]) if self.custom_list else ""

text: "{}{}{}".format(self.custom_list[0], self.custom_list[1], self.custom_list[2]) if len(self.custom_list) >= 3 else ""

或者使用更好的选择join

text: "".join(self.custom_list)

最新更新