在表格Kivy中显示元组

时间:2018-09-04 14:08:04

标签: python python-3.x kivy kivy-language

我有此代码:

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在表中显示元组/列表的内容。谢谢:)

2 个答案:

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