Как добавить базу данных в wx.grid из wxpython? - PullRequest
0 голосов
/ 03 февраля 2019

Я попытался добавить базу данных следующим образом.

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()

Как видите, я 'Я пытался с печатью, но цель заключается в следующем коде:

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

в форме 1, у меня есть следующее

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

Я знаю, что я не могу в повторяющихся предложениях, МожетВы помогаете мне, пожалуйста?Я остановился

Было бы правильно, что я уже определил вас? Потому что мои данные превышают определенное значение

self.m_grid1.CreateGrid( 6, 3 )

1 Ответ

0 голосов
/ 04 февраля 2019

Вот один из способов сделать это, есть несколько, в зависимости от того, как база данных построена и доступна.
См. 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...