【问题标题】:Show tuple in a table Kivy在表格 Kivy 中显示元组
【发布时间】:2020-10-01 02:02:29
【问题描述】:

我有这个代码:

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】:

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

    数据:

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

    data 是一个 AliasProperty,它获取和设置用于生成的数据 意见。

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

    另一方面,ViewButton 没有数据属性而是文本,因此您必须保存该信息。

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

    【讨论】:

    • 我可以问一个问题吗?来自此处的 track.py 脚本:github.com/Jezrianne/ANTS/blob/master/track.py 当我切换应该在您回答时显示表格的轨道选项卡时,它只会返回一个按钮。在这件事上有什么帮助吗?谢谢:)
    • @JezreelMartin 为什么 Track 继承自 Screen 和 Button ?,两者都是小部件,从两者继承是不正确的。
    • 哦,好的,谢谢,所以我应该让它只从屏幕继承吗?还是因为它继承自按钮,所以它只返回一个按钮?谢谢:)
    • @JezreelMartin 你还是没有回答我的问题,你继承的目标是什么?
    • 因为屏幕返回按钮?
    猜你喜欢
    • 2020-06-15
    • 1970-01-01
    • 2017-09-18
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2015-07-24
    • 1970-01-01
    相关资源
    最近更新 更多