2016-12-18 6 views
0

Super noob hier. Ich habe mein erstes Python-Programm beendet und es funktioniert genau so, wie es gedacht ist. Es ist eine einfache Suchmaschine für eine kleine Datenbank. Jetzt versuche ich es als Android APP mit Kivy zu portieren. Was ich jetzt tun möchte, ist einfach den Inhalt meiner gesamten SQLite-Datenbank (20 Zeilen oder so) von einer Funktion anzuzeigen, die gut in der ursprünglichen Software funktioniert.Abrufen von SQLITE Python mit Kivy

In der Android-App scheint die Funktion list_table zu funktionieren, weil sie den "gedruckten Text" anzeigt, aber nicht das Element der Datenbank selbst. Im Grunde druckt es nur "MVA:" .Im wirklich nicht sicher warum. Ich habe eine Weile versucht, eine Lösung zu finden, aber ich bin fest:/

Vielen Dank für Ihre Hilfe Leute.

#This is my main.py file 

from kivy.app import App 
import sqlite3 as lite 
import sys 
from kivy.uix.label import Label 
from kivy.uix.textinput import TextInput 
from kivy.uix.anchorlayout import AnchorLayout 
from kivy.core.window import Window 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 


import time 



Window.clearcolor = (1, 1, 1, 1) 

class SearchWidget(BoxLayout): 
    def list_table(self, *args): 
     try: 
      con = lite.connect('data.db') 
      con.text_factory = str 
      cur = con.cursor() 

      cur.execute("SELECT * FROM mva ORDER BY mva ASC") 
      con.commit() 
      ar = cur.fetchall() 

      for item in ar: 
       data = 'MVA ' + str(item[1]) + str(item[2]) + ': ' +  str(item[0]) + ' ' + str(item[3]) 

      return data 

    except lite.Error, e: 

     if con: 
      con.rollback() 

     print "Error %s:" % e.args[0] 
     sys.exit(1) 

    finally: 

     if con: 
      con.close() 


class MyApp(App): 

    def build(self): 

     return SearchWidget() 

if __name__ == '__main__': 
     MyApp().run() 

Und das ist meine my.kv Datei

<SearchWidget>: 
    orientation: 'vertical' 
    TextInput: 
     id: my_textinput 
     font_size: 25 
     size_hint_y: None 
     height: 100 
     text: 'MVA Search' 

    BoxLayout: 
     Label: 
      color: (0, 0, 0, 1) 
      size: self.texture_size 
      text: root.list_table() 
      font_size: 25 

Antwort

0
  1. i root.list_table denke nicht, daß() ist eine gut es idea..i denken sollte eher von einer Schaltfläche aufgerufen werden
  2. Ich habe nicht versucht, diesen Code auszuführen, es zeigt eindeutig nicht auf die Arbeit auf der UI..wenn Sie ein Widget zum Boxlayout hinzufügen möchten, können Sie dies tun.Fragen Sie meine Einrückung.

    def list_table(self, *args): 
        try: 
         con = lite.connect('data.db') 
         con.text_factory = str 
         cur = con.cursor() 
    
        cur.execute("SELECT * FROM mva ORDER BY mva ASC") 
        con.commit() 
        ar = cur.fetchall() 
    
        for item in ar: 
         data = 'MVA ' + str(item[1]) + str(item[2]) + ': ' +  str(item[0]) + ' ' + str(item[3]) 
         self.add_widget(Label(text=data)) 
    
        return data` 
    
+0

Ihre Lösung funktioniert. Danke für Ihre Hilfe. – Atoms