我在Kubuntu Python 2.7.5+
上使用13.10
wx 2.8.12.1
。
我没有大数据库(大约3150行)我只有一个员工表(名字,姓氏,地址,电话,电子邮件)。在我的应用程序中,我将它们存储在SQLite
数据库中,并使用wx.ListCtrl
向用户显示行。
但是,将此类数据库加载到wx.ListCtrl
需要很长时间(我认为超过10秒)。 问题是:是否有可能提高选择速度?
首先,在我的Python代码中,我创建了一个表:
def createEmployeesTable(self):
connection = sqlite.connect(self.dbname)
try:
with connection:
cursor = connection.cursor()
sql = '''\
CREATE TABLE IF NOT EXISTS Employees (
ID INTEGER PRIMARY KEY NOT NULL,
FIRSTNAME TEXT,
LASTNAME TEXT,
EMAIL TEXT,
ADDRESS TEXT,
PHONE TEXT)
'''
cursor.execute(sql)
finally:
connection.close()
然后,我插入一些员工的数据,最后选择在弹出窗口中显示数据,其中包含wx.ListCtrl
:
def getAllEmployees(self):
employees = []
connection = sqlite.connect(self.dbname)
try:
with connection:
cursor = connection.cursor()
sql = "SELECT firstname, lastname, email, phone, address FROM Employees"
cursor.execute(sql)
for (firstname, lastname, email, phone, address, ) in cursor:
employees.append(Employee(firstname, lastname, email, phone, address))
finally:
connection.close()
return employees
非常感谢您的帮助。
答案 0 :(得分:2)
您可能需要使用wx.ListCtrl
的虚拟版本。它在documentation中提到如下:
与列表控件的其他模式完全不同的报表视图的特殊情况是虚拟控件,其中项目数据(包括文本,图像和属性)由主程序管理并且由仅在需要时控制自身,允许控制数百万个项目,而不会消耗太多内存。
似乎没有太多的例子,但我确实找到了以下内容:
在wxPython演示中还有一个完整的示例,其中包含近1,000,000个项目,因此您一定要检查它。