郁闷:制作一个表格小部件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了郁闷:制作一个表格小部件相关的知识,希望对你有一定的参考价值。

我正在使用GridLayout和ScrollView在表格小部件中使用kivy。这就是我所拥有的:

https://github.com/Skucul/listwidget

有更好的方法来实现它吗?那么RecyclerView怎么样?

答案

我使用RecycleView和KivyMD获得了非常好的结果,它包含带有图标和图像的列表元素等。

我也看到了你的其他存储库,例如Datepicker和Timepicker,有类似的,在KivyMD中有非常相似的小部件,也许你会考虑使用它们甚至更好,增强它们。

另一答案
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivymd.label import MDLabel
from kivy.uix.button import Button
from kivy.properties import NumericProperty, ListProperty,StringProperty
from kivy.graphics import Color
from kivy.metrics import dp

Builder.load_string('''
#:import MDLabel kivymd.label.MDLabel
<Table>
    orientation:'vertical'  
    size_hint_y:0.9
    GridLayout:
        id:header
        spacing:2
        padding:[10,10,10,10]
        size_hint_y:None
        height:dp(48)
    ScrollView:
        size_hint_y:1       
        GridLayout:
            id:body
            spacing:2
            padding:[10,10,10,10]
            size_hint_y:None
            #spacing:dp(2)
            height:self.minimum_height

    # GridLayout:
    #     id:footer
    #     height:dp(48)
    #     pos_hint:{'center_y':0.1}

<Header>
    padding:[10,10,10,10]
    canvas.before:
        Color:
            rgba: app.theme_cls.accent_dark
        Rectangle:
            pos: self.pos
            size: self.size
    size_hint_y:None
    size_hint_x:header.size_hint_x
    height:dp(48)
    MDLabel:
        id:header
        text:root.text
<Cell>
    padding:[10,10,10,10]
    canvas.before:
        Color:
            rgba: app.theme_cls.accent_color
        Rectangle:
            pos: self.pos
            size: self.size
    size_hint_y:None
    size_hint_x:cell.size_hint_x
    height:dp(48)
    MDLabel:
        id:cell
        text:root.text               
''')

class Header(BoxLayout):
    text = StringProperty()



class Cell(BoxLayout):
    text = StringProperty()




class Table(BoxLayout):
    cols = NumericProperty(1)
    table_content = ListProperty([{"col 1":"row 11","col 2":"row 21"},{"col 1":"row 12","col 2":"row 22"}],allownone=True)
    thead = ListProperty()
    tbody = ListProperty()
    color = [128, 0, 2, 0.8]



    def __init__(self, **kwargs):
        super(Table, self).__init__(**kwargs)

        for i in self.table_content:
            self.thead =[]
            for j in i.keys():
                self.thead.append(j)
        self.ids['header'].cols = len(self.thead)
        self.ids['body'].cols = len(self.thead)
        for i in self.thead:
            head = Header(text=i.upper())
            self.ids['header'].add_widget(head)
        for i in self.table_content:
            for j in i.keys():
                body = Cell(text=i[j])
                self.ids['body'].add_widget(body)





#create MDTable.py file and save above code
#then import class where to add table widget
#simply use below function pass id where to add table and list of data
    def add_table(self,id,list):
        from table import Table
        id.add_widget(Table(table_content=list))
# list example:[{'head1':'content1','head2':'content2'},###{'head1':'content1','head2':'content2'}]

以上是关于郁闷:制作一个表格小部件的主要内容,如果未能解决你的问题,请参考以下文章

Android小部件,启动一个片段?

如何使用 PyQt 在小部件上绘制点和线

如何制作有角度的表格标题?

此应用小部件片段中所有意图 (PendingIntents) 的逻辑流

单击主屏幕小部件时如何打开特定片段

从表格小部件中的选定单元格中检索单元格数据