【发布时间】:2015-05-22 00:12:16
【问题描述】:
我有一个列表列表,其中每个内部列表有 3 个项目(如下例所示)。
数据 = [ ["abe","abo","aba"], [“ade”,“acd”,“acr”], ["adr","adw","adz"], ["akw","aky","akz"], [“坏”,“bbf”,“btr”], [“bst”,“bsv”,“总线”] ]
在 kv 文件中,我设置了一个标签(在 ScrollView 内)以在用户按下给定按钮时显示列表中的信息。
> ScrollView:
pos_hint_y: 'bottom'
size_hint_y: 0.65
id:scroll
Label:
id: mylabel
text: 'Choose a letter to display the list'
text_size: (self.width, None)
size_hint_y: None
height: self.texture_size[1]
padding_x:20
valign: ('top')
halign: ('left')
现在(按原样)标签显示我想要的信息,但是是连续流动的。
> def btn_a(self):
self.l = self.mylabel # reference to mylabel in kv.file
self.l.bind(size=lambda s, w: s.setter('text_size')(s, w)) # binding
a_list = [x for x in self.data if x[0][0] == "a"] # getting info starting with letter "a"
self.l.text = str(a_list) # setting the info inside the label
我希望信息显示如下:
abe, abo, aba
ade, acd, acr
adr, adw, adz
akw, aky, akz
我尝试使用“\n”.join(),尝试扁平化列表,使用循环和其他你会笑的解决方案......我在编程方面的经验很少,我'我想学习,但这让我睡不着觉。请帮忙!如何分隔每行 3 个项目(不带方括号,但带逗号)?
【问题讨论】:
-
@junnytony 的解决方案看起来应该以您想要的终端方式打印。如果你想知道为什么你的按钮在一行而不是新行,我没有看到你向我们展示的任何代码表明你会在任何地方创建一个新行。
-
在 kv.file 中,我有一个 Button 触发 (on_press: root.btn_a()) main.py 中的 btn_a 函数。我想我应该解释一下我将@junnytony 的建议分配给: lis = "\n".join(["%s, %s, %s" % (a, b, c) for a, b, c在数据中])。然后更改以下内容:self.l.text = str(lis)。尽管我尝试了几段代码,但我没有将它们包含在问题中,因为它们不起作用。也许我应该这样做,以表明我做错了什么......对不起。
-
我的意思是,您遇到的问题似乎与您向我们展示的代码无关...我的意思是,您似乎想制作一个 gui (在浏览器中?--再次,完全不熟悉 kv),在这种情况下,您需要通过 kv 或类似的东西为您的按钮定义行分隔。如果我正确理解您的问题,只需添加 '\n' (字符串的换行符)不一定会做任何事情。如果是网页,则需要
标签。如果 kv 有它自己的换行语法,或者需要一个新组,那么我会查找它——就像 PySide QtGui 需要布局一样。
标签: python list nested label kivy