Python 如何将多个列放入kivy RecycleView?
我想将(csv-)表的数据放入kivy recycleview 如果我给kv中的标签指定了一个固定文本,我就设法用一行插入多个列,但我无法让它用字典列表中的数据填充标签。这是迄今为止我用来测试概念的代码:Python 如何将多个列放入kivy RecycleView?,python,kivy,kivy-language,Python,Kivy,Kivy Language,我想将(csv-)表的数据放入kivy recycleview 如果我给kv中的标签指定了一个固定文本,我就设法用一行插入多个列,但我无法让它用字典列表中的数据填充标签。这是迄今为止我用来测试概念的代码: 从kivy.app导入应用 从kivy.lang导入生成器 从kivy.uix.recycleview导入recycleview 从kivy.uix.boxlayout导入boxlayout 导入csv items=[{'SP1':'ArtikerNummer','SP2':'Name','S
从kivy.app导入应用
从kivy.lang导入生成器
从kivy.uix.recycleview导入recycleview
从kivy.uix.boxlayout导入boxlayout
导入csv
items=[{'SP1':'ArtikerNummer','SP2':'Name','SP3':'Groesse'},
{'SP1':'510001','SP2':'Big Pump','SP3':'1.50 L'},
{'SP1':'523001','SP2':'Leonie Still','SP3':'1.50 L'},
{'SP1':'641301','SP2':'ColaMix','SP3':'1.50L'}
]
类选项卡(框布局):
定义初始(自我,**kwargs):
超级(Tabelle,self)。\uuuuu初始值(**kwargs)
def insert_SP(自身,数据):
对于数据中的i:
self.spalte1_SP=i['SP1']
#打印(自选垃圾邮件1\u SP)
self.spalte2_SP=i['SP2']
self.spalte3_SP=i['SP3']
Builder.load_字符串(“”)
:
方向:“水平”
spalte1_SP:“spalte1”
spalte2_SP:“spalte2”
spalte3_SP:“spalte3”
标签:
id:Spalte1
文本:root.spalte1\u SP
标签:
id:Spalte2
文本:root.spalte2\u SP
标签:
id:Spalte3
文本:root.spalte3\u SP
:
viewclass:“Tabelle”
循环利用布局:
默认大小:无,dp(20)
默认大小提示:1,无
尺寸提示:无
高度:自身最小高度
方向:“垂直”
''')
RV级(回收利用审查):
定义初始(自我,**kwargs):
超级(RV,自我)。\uuuuu初始值(**kwargs)
#self.data=[]
x=Tabelle()
x、 插入SP(项目)
类TestApp(应用程序):
def生成(自):
返回RV()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
TestApp().run()
我希望在3列中看到项中的数据,但由于某些原因,它们保持为空。它是空的,因为未填充
数据
解决方案
- 删除
类选项卡()中的所有编码
- 将
pass
添加到class选项卡()
- 将以下内容添加到
类RV()
片段
视图是通过处理生成的,本质上是一个列表
,并使用这些dict生成viewclass的实例
根据需要
data
当前视图适配器使用的数据。这是一个目录
其键映射到viewclass的相应属性名称
数据是一个别名属性,用于获取和设置用于生成
这些观点
例子
main.py
从kivy.app导入应用
从kivy.lang导入生成器
从kivy.uix.recycleview导入recycleview
从kivy.uix.boxlayout导入boxlayout
items=[{'SP1':'ArtikerNummer','SP2':'Name','SP3':'Groesse'},
{'SP1':'510001','SP2':'Big Pump','SP3':'1.50 L'},
{'SP1':'523001','SP2':'Leonie Still','SP3':'1.50 L'},
{'SP1':'641301','SP2':'ColaMix','SP3':'1.50L'}
]
类选项卡(框布局):
通过
Builder.load_字符串(“”)
:
方向:“水平”
spalte1_SP:“spalte1”
spalte2_SP:“spalte2”
spalte3_SP:“spalte3”
标签:
id:SP1
文本:root.spalte1\u SP
标签:
id:SP2
文本:root.spalte2\u SP
标签:
编号:SP3
文本:root.spalte3\u SP
:
viewclass:“Tabelle”
循环利用布局:
默认大小:无,dp(20)
默认大小提示:1,无
尺寸提示:无
高度:自身最小高度
方向:“垂直”
''')
RV级(回收利用审查):
定义初始(自我,**kwargs):
超级(RV,自我)。\uuuuu初始值(**kwargs)
self.data=[{'spalte1_SP':str(x['SP1']),'spalte2_SP':str(x['SP2']),'spalte3_SP':str(x['SP3'])表示项目中的x]
类TestApp(应用程序):
def生成(自):
返回RV()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
TestApp().run()
输出
我说不出话来。在花了一整天的时间讨论这个问题,并看到解决方案实际上看起来是多么简单之后。。。你简直不敢相信这对我有多大帮助!非常感谢。不客气!另一种解决方案是使用viewclass:'Label'
,RecycleGridLayout:
,cols:3
,和self.data=[{'text':val}作为行中项目的行,用于行中的val.values()]
。谢谢,当我想添加更多列时,它看起来更通用。肯定会测试出来的。
data
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.boxlayout import BoxLayout
items = [{'SP1': 'Artikelnummer', 'SP2': 'Name', 'SP3': 'Groesse'},
{'SP1': '510001', 'SP2': 'Big Pump', 'SP3': '1.50 L'},
{'SP1': '523001', 'SP2': 'Leonie Still', 'SP3': '1.50 L'},
{'SP1': '641301', 'SP2': 'Cola Mix', 'SP3': '1.50 L'}
]
class Tabelle(BoxLayout):
pass
Builder.load_string('''
<Tabelle>:
orientation: 'horizontal'
spalte1_SP: 'spalte1'
spalte2_SP: 'spalte2'
spalte3_SP: 'spalte3'
Label:
id: SP1
text: root.spalte1_SP
Label:
id: SP2
text: root.spalte2_SP
Label:
id: SP3
text: root.spalte3_SP
<RV>:
viewclass: 'Tabelle'
RecycleBoxLayout:
default_size: None, dp(20)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
''')
class RV(RecycleView):
def __init__(self, **kwargs):
super(RV, self).__init__(**kwargs)
self.data = [{'spalte1_SP': str(x['SP1']), 'spalte2_SP': str(x['SP2']), 'spalte3_SP': str(x['SP3'])} for x in items]
class TestApp(App):
def build(self):
return RV()
if __name__ == '__main__':
TestApp().run()