如何将数据库添加到wxpython的wx.grid?

时间:2019-02-03 04:50:43

标签: python-3.x sqlite wxpython

我试图通过以下方式添加数据库。

ints

通过按钮调用

import sys
import sqlite3
# --- constructor
# --------------
self.m_grid1 = wx.grid.Grid( self.m_panel6, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )

# Grid
self.m_grid1.CreateGrid( 6, 3 )

如您所见,我一直在尝试打印,但是目标是以下代码:

def Database_View( self, event ):
    db = sqlite3.connect("database/Save.db")
    cur = db.cursor()
    cur.execute("SELECT id,login,password FROM datosurl")
    data = cur.fetchall()

    if data:
        for row, form  in  enumerate(data):
            for column, item in enumerate(form):
                #self.m_grid1.SetCellValue(column, row, form[0])
                print("row: "+str(row)+" - column - "+str(column)+" -  "+str(form[0]))
                print("row :"+str(row)+" - column - "+str(column)+" -  "+ str(form[1]))
                print("row :"+str(row)+" - column - "+str(column)+" -  "+ str(form[2]))
                column +=1
            row +=1
    db.close()

在form1中,我有以下内容

self.m_grid1.SetCellValue(column, row, form[0])

我知道我的重复句子不及格,你能帮我吗?我已经停滞了

我已经定义了您吗?因为我的数据超过了定义的值

form('id','apple','english') #and continuously

1 个答案:

答案 0 :(得分:0)

这是一种实现方法,根据数据库的构造和访问方式,有几种。
请参阅onLoadTable,该列会加载列标签和数据。

import wx
import sqlite3 as sqlite
import wx.grid as gridlib

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,"",size=(900,400))

        panel = wx.Panel(self, -1)

        self.db = db
        self.cursor = self.db.conn.cursor()
        result = self.cursor.execute("create table if not exists Data (myindex INTEGER PRIMARY KEY AUTOINCREMENT,  id int,  login text, password text)");
        vbox = wx.BoxSizer(wx.VERTICAL)

        self.grid = wx.grid.Grid(panel)
        rows = self.cursor.execute('SELECT Count(*) FROM Data')
        val = rows.fetchone()
        self.db_exists = val[0]
        self.grid.CreateGrid(15,20)
        self.grid.Scroll(0,0)
        self.LoadBtn = wx.Button(panel, -1, "Commit/Load")
        self.Bind(wx.EVT_BUTTON, self.onLoad, self.LoadBtn)

        vbox.Add(self.LoadBtn)
        vbox.Add(self.grid)
        panel.SetSizer(vbox)
        panel.Fit()

    def onLoad(self, event):
        if self.db_exists == 0:
            for i in range(10):
                id = i
                login = 'login'+str(i)
                password = 'pass'+str(i)
                self.cursor.execute("INSERT INTO Data VALUES (NULL,?,?,?);",(id, login, password))
            self.db.conn.commit()
        self.onLoadTable()

    def onLoadTable(self):
        self.grid.ClearGrid()

        metadata = self.cursor.execute('SELECT * from Data')
        labels = []
        for i in metadata.description:
            labels.append(i[0])
        labels = labels[1:]
        for i in range(len(labels)):
            self.grid.SetColLabelValue(i, labels[i])

        logins = self.cursor.execute('SELECT * from Data')
        for row in logins:
            row_num = row[0]
            cells = row[1:]
            for i in range(0,len(cells)):
                if cells[i] != None and cells[i] != "null":
                    self.grid.SetCellValue(row_num-1, i, str(cells[i]))
        self.Show()
        self.db.conn.commit()

class GetDatabase():
    def __init__(self):
        self.conn = sqlite.connect("logins.db")

if __name__ == "__main__":
    db=GetDatabase()
    app = wx.App()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()

enter image description here