可以理解,下面的代码显示QList.addItems调用需要0.393秒。我在一个更大的程序中使用类似的代码 - 这个想法是为用户提供一个(非常)大的唯一部件号列表。他们开始在单独的QEntry小部件中输入正则表达式,该小部件实时更新QList,随着时间的推移将列表缩短和缩短。
我遇到的问题是,如果用这么大的列表,当用户输入正则表达式时,需要花费相当多的时间来更新QList视图。我不认为这是一个独特的问题 - 这个问题的常见解决方案是什么?如何以合理的方式截断我的列表,以免对用户体验产生显着的负面影响? QListView是更好的选择吗?将列表缩短到100个左右的项目是否有意义,并在用户滚动时实时加载更多项目?或者这种方法有陷阱吗?
import time
from itertools import cycle
from PyQt4 import QtCore, QtGui
pns = cycle(['ABCD', 'EFGH', 'IJKL', 'MNOP'])
pn_col = []
for i in range(505000):
pn_col.append("{}_{}".format(next(pns), i))
app = QtGui.QApplication([])
myList = QtGui.QListWidget()
start = time.clock()
myList.addItems(pn_col)
print("Time = {}".format(time.clock() - start))
更新:事实证明我的列表实际上是大约4000个唯一值,重复总计500k。卫生署!删除重复项修复了我的性能问题。不过,我仍然有兴趣了解科学和其他方面,列出这些数据的更有效方法。它是一个真正的平面列表,我不能轻易地对它们进行分组或层次结构。