我有此代码:
SiteName PaperName
------------------------
AAA Paper2
AAA Paper3
AAA Paper4
AAA Paper1
AAA Paper2
AAA Paper4
BBB Paper2
BBB Paper3
BBB Paper4
基本上,数据库中查询的结果存储为元组。但是,当我运行它时,它返回一个错误:
import pymysql
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
db = pymysql.connect("host", "user", "password", "database")
cursor = db.cursor()
cursor.execute("SELECT phone_info FROM ants WHERE id='onexT1'")
data_list = cursor.fetchall()
hello = list(data_list)
class ViewButton(Button):
def print_data(self, data):
print(data)
KV = '''
<ViewButton>:
on_release:
root.print_data(self.data)
RecycleView:
data: ()
viewclass: 'ViewButton'
RecycleBoxLayout:
default_size_hint: 1, None
orientation: 'vertical'
'''
class Test(App):
def build(self):
root = Builder.load_string(KV)
root.data = (item for item in hello)
return root
if __name__ == '__main__':
Test().run()
因此,我尝试将元组转换为列表,但它返回与上述相同的错误。
我想要的是使用recycleview在表中显示元组/列表的内容。谢谢:)
答案 0 :(得分:0)
RecycleView需要一个可迭代的哈希表,例如字典列表,其中字典的键是将在视图类中使用的属性,这在docs中表示:
数据:
当前视图适配器使用的数据。这是字典列表 其键映射到视图类的相应属性名称。
data是AliasProperty,它获取并设置用于生成的数据 视图。
fetchall返回一个元组列表,并且我们必须将该元组列表转换为字典列表,其中字典键是“文本”,因为它是ViewButton使用的属性。
另一方面,ViewButton不具有data属性,而具有文本,因此您必须保存该信息。
...
data_list = cursor.fetchall()
hello = [({"text": result[0]}) for result in data_list] # convert
class ViewButton(Button):
def print_data(self, data):
print(data)
KV = '''
<ViewButton>:
on_release:
root.print_data(self.text) # <---
RecycleView:
viewclass: 'ViewButton'
RecycleBoxLayout:
default_size_hint: 1, None
orientation: 'vertical'
'''
class Test(App):
def build(self):
root = Builder.load_string(KV)
root.data = hello
return root
if __name__ == '__main__':
Test().run()
答案 1 :(得分:0)
0
RecycleView需要一个可迭代的哈希表,例如字典列表,其中字典的键是将在视图类中使用的属性,这在文档中指出:
数据:
当前视图适配器使用的数据。这是字典的列表,其键映射到视图类的相应属性名称。
data是AliasProperty,它获取并设置用于生成视图的数据。
fetchall返回一个元组列表,并且我们必须将该元组列表转换为字典列表,其中字典键是“文本”,因为它是ViewButton使用的属性。
另一方面,ViewButton不具有data属性,而是文本,因此您必须保存该信息。
data_list = cursor.fetchall()
hello = [({"text": result[0]}) for result in data_list] # convert
class ViewButton(Button):
def print_data(self, data):
print(data)
KV = '''
<ViewButton>:
on_release:
root.print_data(self.text) # <---
RecycleView:
viewclass: 'ViewButton'
RecycleBoxLayout:
default_size_hint: 1, None
orientation: 'vertical'
'''
class Test(App):
def build(self):
root = Builder.load_string(KV)
root.data = hello
return root
if __name__ == '__main__':
Test().run()