使用Kivy和sqlite 3的动态表显示

C.Y*_*.Yu 1 python sqlite listview kivy

我正在使用GUI来管理库存(Python 3.4,Sqlite3和Kivy 1.9.1),其想法是能够根据数据库中列出的不同功能识别产品。

有没有一种方法可以使用kivy显示sqlite表?我想ListView可能是解决办法,但我真的努力理解如何使CustomListItem用权args_converter,以获得数列与他们不同的标签。

el3*_*ien 5

是的,您可以使用RecycleView它。
试试这个例子:

import sqlite3 as lite

con = lite.connect('test.db')
cur = con.cursor()

try:
    with con:
        cur.execute("CREATE TABLE Cars(Id INT, Name TEXT, Price INT)")
        cur.execute("INSERT INTO Cars VALUES(1,'Audi',52642)")
        cur.execute("INSERT INTO Cars VALUES(2,'Mercedes',57127)")
        cur.execute("INSERT INTO Cars VALUES(3,'Skoda',9000)")
        cur.execute("INSERT INTO Cars VALUES(4,'Volvo',29000)")
        cur.execute("INSERT INTO Cars VALUES(5,'Bentley',350000)")
        cur.execute("INSERT INTO Cars VALUES(6,'Citroen',21000)")
        cur.execute("INSERT INTO Cars VALUES(7,'Hummer',41400)")
        cur.execute("INSERT INTO Cars VALUES(8,'Volkswagen',21600)")
except:
    pass


from kivy.uix.boxlayout import BoxLayout
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import ListProperty


Builder.load_string("""

<MyLayout>:
    Button:
        text: "Get data"
        on_press: root.get_data()
    RecycleView:
        data: [{'text':"Id:{} Brand:{} Km:{}".format(id,name,km)} for id,name,km in root.rows]
        viewclass: "Label"
        RecycleBoxLayout:
            default_size: None, dp(56)
            default_size_hint: 1, None
            size_hint_y: None
            height: self.minimum_height
            orientation: 'vertical'

""")


class MyLayout(BoxLayout):
    rows = ListProperty([("Id","Brand","Price")])
    def get_data(self):
        cur.execute("SELECT * FROM Cars")
        self.rows = cur.fetchall()
        print(self.rows)


runTouchApp(MyLayout())
Run Code Online (Sandbox Code Playgroud)