在表Kivy中显示元组

问题描述 投票:0回答:1

我有这个代码:

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()

基本上,数据库中查询的结果存储为元组。但是当我运行它时,它会返回一个错误:

AttributeError: 'tuple' object has no attribute 'get'

所以我尝试将元组转换为列表,但它返回与上面相同的错误。

我想要的是使用recycleview在表格中显示元组/列表的内容。谢谢 :)

python python-3.x kivy kivy-language
1个回答
0
投票

RecycleView需要一个哈希表的迭代,例如字典列表,其中字典的键是将在视图类中使用的属性,这在docs中指出:

数据:

当前视图适配器使用的数据。这是一个dicts列表,其键映射到视图类的相应属性名称。

data是一个AliasProperty,用于获取和设置用于生成视图的数据。

fetchall返回一个元组列表,我们必须将该元组列表转换为字典列表,其中字典键是“text”,因为它是ViewButton使用的属性。

另一方面,ViewButton没有data属性而是text,因此您必须保存该信息。

...
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()
© www.soinside.com 2019 - 2024. All rights reserved.