可以理解的是,下面的代碼顯示QList.addItems調用需要0.393秒。我在一個更大的程序中使用類似的代碼 - 這個想法是給用戶提供一個(非常)大量的獨特零件號碼。他們開始在一個單獨的QEntry小部件中輸入一個正則表達式,這個小部件實時更新QList,並隨着時間的推移縮短列表的長度。如何更改我的QListWidget實現以提高性能?
我的問題是,在如此大的列表,它需要的時間作爲用戶輸入他們的正則表達式更新的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的獨特價值。衛生署!刪除重複項目修復了我的性能問題。儘管如此,我仍然對知道科學和材料感興趣,因爲它們更有效地列出這些數據。這是一個真正的平面清單,我不能輕易對它們進行分組或分層。
將所有**展示在平面列表中的目的是什麼?這似乎是一個非常可怕的界面(想象你的文件管理器以這種方式工作)。事實上,你可以使用模式逐步減少列表的大小,這意味着數據可以被構造爲一棵樹。如果是這樣,樹的每個分支可以根據需要填充,而不是一次加載所有內容。 – ekhumoro