我是python、kivy和sqlite的新手。但我必须完成这项艰巨的任务。:—(如有任何帮助,将不胜感激。提前谢谢!
任务是:在android的kivy屏幕上显示来自.db文件的数据。
在这里我再次发布代码。#!/usr/bin/python
# -*- coding: utf-8 -*-
import sqlite3 as lite
import sys
con = lite.connect('test.db')
with con:
cur = con.cursor()
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)")
然后将数据库保存到C:\\test.db。
然后我用label和button制作了一个kivy屏幕。# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.lang import Builder
import random
root_widget = Builder.load_string('''
BoxLayout:
orientation: 'vertical'
Label:
text: 'Hello' #How to define it?
font_size: 30
Button:
size: root.width/2, 15
text: 'next random'
font_size: 30
# on_release: #How to define it?
''')
class TestApp(App):
def build(self):
return root_widget
if __name__ == '__main__':
TestApp().run()
我想在每次单击button时,从label上显示的db file中获得一个random汽车名。
最初的label文本,现在是“Hello”一词,应该替换为一个随机的汽车名。因此,每次运行程序时,都会在label上显示车辆名称。
但我真的不知道怎么写代码。
谢谢你的帮助。
更新
我写了代码,但不起作用。# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.clock import mainthread
import sqlite3
import random
class MyBoxLayout(BoxLayout):
def init(self, **kwargs):
super().__init__(**kwargs)
@mainthread # execute within next frame
def delayed():
self.load_random_car()
delayed()
def load_random_car(self):
conn = sqlite3.connect("C:\\test.db")
cur = conn.cursor()
####Length of db file
with conn:
cur = conn.cursor()
cur.execute("SELECT * FROM Cars")
rows = cur.fetchall()
LengthSQLFile = len(rows)
print LengthSQLFile
CurrentNo = random.randint(0, LengthSQLFile)
CurrentNo_ForSearch = (CurrentNo ,)
cur.execute("select * from Cars where rowid = ?" , CurrentNo_ForSearch)
CurrentAll = cur.fetchone()
CurrentAll = list(CurrentAll) # Change it from tuple to list
print CurrentAll
Current = CurrentAll[1]
self.ids.label.text = Current #"fetch random car data from db and put here"
root_widget = Builder.load_string('''
BoxLayout:
orientation: 'vertical'
Label:
id: label
font_size: 30
Button:
size: root.width/2, 15
text: 'next random'
font_size: 30
on_release: root.load_random_car()
''')
class TestApp(App):
def build(self):
# MyBoxLayout(BoxLayout)
return root_widget
if __name__ == '__main__':
TestApp().run()
#2更新:
现在的密码是。。。它显示错误消息:AttributeError: 'BoxLayout' object has no attribute 'load_random_car'# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.clock import mainthread
import sqlite3
import random
class MyBoxLayout(BoxLayout):
def init(self, **kwargs):
super().__init__(**kwargs)
@mainthread # execute within next frame
def delayed():
self.load_random_car()
delayed()
def load_random_car(self):
conn = sqlite3.connect("C:\\test.db")
cur = conn.cursor()
cur.execute("SELECT * FROM Cars ORDER BY RANDOM() LIMIT 1;")
currentAll = cur.fetchone()
currentAll = list(currentAll) # Change it from tuple to list
print currentAll
current = currentAll[1]
self.ids.label.text = current #"fetch random car data from db and put here"
root_widget = Builder.load_string('''
BoxLayout:
orientation: 'vertical'
Label:
id: label
font_size: 30
Button:
size: root.width/2, 15
text: 'next random'
font_size: 30
on_release: root.load_random_car()
''')
class TestApp(App):
def build(self):
# MyBoxLayout(BoxLayout)
return root_widget
if __name__ == '__main__':
TestApp().run()