問題描述
我想將(csv-)表的數據放入 kivy recycleview.
如果我將固定文本分配給 kv 中的標簽,我設法在一行中插入多個列,但我無法讓它用字典列表中的數據填充標簽.到目前為止,這是我用來測試概念的代碼:
from kivy.app import App從 kivy.lang 導入生成器從 kivy.uix.recycleview 導入 RecycleView從 kivy.uix.boxlayout 導入 BoxLayout導入 csvitems = [{'SP1': 'Artikelnummer', 'SP2': '姓名', 'SP3': 'Groesse'},{'SP1': '510001', 'SP2': '大泵', 'SP3': '1.50 L'},{'SP1':'523001','SP2':'Leonie Still','SP3':'1.50 L'},{'SP1':'641301','SP2':'可樂混合','SP3':'1.50 L'}]類表(BoxLayout):def __init__(self, **kwargs):super(Tabelle, self).__init__(**kwargs)def insert_SP(自我,數據):對于數據中的 i:self.spalte1_SP = i['SP1']#print(self.spalte1_SP)self.spalte2_SP = i['SP2']self.spalte3_SP = i['SP3']builder.load_string('''<塔貝爾>:方向:水平"spalte1_SP: 'spalte1'spalte2_SP: 'spalte2'spalte3_SP: 'spalte3'標簽:編號:Spalte1文本:root.spalte1_SP標簽:編號:Spalte2文本:root.spalte2_SP標簽:編號:Spalte3文本:root.spalte3_SP<房車>:視圖類:塔貝爾"回收箱布局:default_size:無,dp(20)default_size_hint:1,無size_hint_y:無高度:self.minimum_height方向:垂直"''')房車類(回收視圖):def __init__(self, **kwargs):超級(房車,自我).__init__(**kwargs)#self.data = []x = 表()x.insert_SP(項目)類測試應用程序(應用程序):定義構建(自我):返回 RV()如果 __name__ == '__main__':TestApp().run()
我希望在 3 列中看到來自 items 的數據,但由于某種原因它們保持為空.
它是空的,因為 data
沒有填充.
解決方案
- 刪除
class Tabelle()
中的所有編碼 - 將
pass
添加到class Tabelle()
- 將以下內容添加到
class RV()
的構造函數中,
__init__()
片段
self.data = [{'spalte1_SP': str(x['SP1']), 'spalte2_SP': str(x['SP2']), 'spalte3_SP': str(x['SP3'])} for x in items]
I want to put the data of a (csv-)table into a kivy recycleview.
I managed to insert multiple columns with one row, if i assign a fixed text to the Labels in the kv, but i can't get it to fill the labels with data from a dictionary list. This is the code so far, that i use to test the concept:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.boxlayout import BoxLayout
import csv
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):
def __init__(self, **kwargs):
super(Tabelle, self).__init__(**kwargs)
def insert_SP(self, data):
for i in data:
self.spalte1_SP = i['SP1']
#print(self.spalte1_SP)
self.spalte2_SP = i['SP2']
self.spalte3_SP = i['SP3']
Builder.load_string('''
<Tabelle>:
orientation: 'horizontal'
spalte1_SP: 'spalte1'
spalte2_SP: 'spalte2'
spalte3_SP: 'spalte3'
Label:
id: Spalte1
text: root.spalte1_SP
Label:
id: Spalte2
text: root.spalte2_SP
Label:
id: Spalte3
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 = []
x = Tabelle()
x.insert_SP(items)
class TestApp(App):
def build(self):
return RV()
if __name__ == '__main__':
TestApp().run()
I expect to see the data from items in 3 columns, but they stay empty for some reason.
It is empty because data
was not populated.
Solution
- Remove all codings in
class Tabelle()
- Add
pass
intoclass Tabelle()
- Add the following into constructor,
__init__()
ofclass RV()
Snippets
self.data = [{'spalte1_SP': str(x['SP1']), 'spalte2_SP': str(x['SP2']), 'spalte3_SP': str(x['SP3'])} for x in items]
Kivy RecycleView ? data
The view is generatad by processing the data, essentially a list of dicts, and uses these dicts to generate instances of the viewclass as required.
data
The data used by the current view adapter. This is a list of dicts whose keys map to the corresponding property names of the viewclass.
data is an AliasProperty that gets and sets the data used to generate the views.
Example
main.py
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()
Output
這篇關于如何將多列放入 kivy RecycleView?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!