1
我想获得一个SQLite3数据库来填充一个wx.ListCrtl。我可以把它打印到标准输出/标准错误没有任何问题。我似乎无法弄清楚如何在DataWindow/DataList中显示数据?我敢肯定,我犯了一些代码错误,所以任何帮助表示赞赏。wxPython - ListCrtl和SQLite3
Main.py
import wx
import wx.lib.mixins.listctrl as listmix
from database import *
import sys
class DataWindow(wx.Frame):
def __init__(self, parent = None):
wx.Frame.__init__(self, parent, -1, 'DataList', size=(640,480))
self.win = DataList(self)
self.Center()
self.Show(True)
class DataList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
def __init__(self, parent = DataWindow):
wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
#building the columns
self.InsertColumn(0, "Location")
self.InsertColumn(1, "Address")
self.InsertColumn(2, "Subnet")
self.InsertColumn(3, "Gateway")
self.SetColumnWidth(0, 100)
self.SetColumnWidth(1, 150)
self.SetColumnWidth(2, 150)
self.SetColumnWidth(3, 150)
class MainWindow(wx.Frame):
def __init__(self, parent = None, id = -1, title = "MainWindow"):
wx.Frame.__init__(self, parent, id, title, size = (800,600),
style = wx.DEFAULT_FRAME_STYLE^(wx.RESIZE_BORDER))
# StatusBar
self.CreateStatusBar()
# Filemenu
filemenu = wx.Menu()
# Filemenu - About
menuitem = filemenu.Append(-1, "&About", "Information about this application")
self.Bind(wx.EVT_MENU, self.onAbout, menuitem)
#Filemenu - Data
menuitem = filemenu.Append(-1, "&Data", "Get data")
self.Bind(wx.EVT_MENU, self.onData, menuitem)
# Filemenu - Seperator
filemenu.AppendSeparator()
#Filemenu - Exit
menuitem = filemenu.Append(-1, "&Exit", "Exit the application")
self.Bind(wx.EVT_MENU, self.onExit, menuitem)
# Menubar
menubar = wx.MenuBar()
menubar.Append(filemenu, "&File")
self.SetMenuBar(menubar)
# Show
self.Show(True)
self.Center()
def onAbout(self, event):
pass
def onData(self, event):
DataWindow(self)
callDb = Database()
sql = "SELECT rowid, address, subnet, gateway FROM pod1"
records = callDb.select(sql)
for v in records:
print "How do I get the records on the DataList?"
#print "%s%s%s" % (v[1],v[2],v[3])
#for v in records:
#DataList.InsertStringItem("%s") % (v[0], v[1], v[2])
def onExit(self, event):
self.Close()
self.Destroy()
def onSave(self, event):
pass
if __name__ == '__main__':
app = wx.App()
frame = MainWindow(None, -1)
frame.Show()
app.MainLoop()
database.py
import os
import sqlite3
class Database(object):
def __init__(self, db_file="data/data.sqlite"):
database_allready_exists = os.path.exists(db_file)
self.db = sqlite3.connect(db_file)
if not database_allready_exists:
self.setupDefaultData()
def select(self,sql):
cursor = self.db.cursor()
cursor.execute(sql)
records = cursor.fetchall()
cursor.close
return records
def insert(self,sql):
newID = 0
cursor = self.db.cursor()
cursor.execute(sql)
newID = cursor.lastrowid
self.db.commit()
cursor.close()
return newID
def save(self,sql):
cursor = self.db.cursor()
cursor.execute(sql)
self.db.commit()
cursor.close()
def setupDefaultData(self):
pass
感谢提示,我仍然试图让它工作。这是抛出错误。 TypeError:无绑定方法必须使用DataList实例作为第一个参数调用InsertStringItem()(改为使用int实例) – Dunwitch 2010-03-29 22:59:19
您需要一个数据列表实例。例如在onData()中你说DataWindow(self) - 但你需要把它分配给一个变量。 data = DataWindow(self) 现在执行您对数据变量.win属性的操作 - data.win.InsertString ... – 2010-03-30 11:32:15