2 回答

TA貢獻1799條經驗 獲得超8個贊
您不需要明確地將項目添加到 QTableModel,您可以圍繞現有數據結構構建自己的模型,例如列表列表或如下所示的 numpy 數組。
from PyQt5 import QtWidgets, QtCore, QtGui
import sys
from PyQt5.QtCore import QModelIndex, Qt
import numpy as np
class MyTableModel(QtCore.QAbstractTableModel):
def __init__(self, data=[[]], parent=None):
super().__init__(parent)
self.data = data
def headerData(self, section: int, orientation: Qt.Orientation, role: int):
if role == QtCore.Qt.DisplayRole:
if orientation == Qt.Horizontal:
return "Column " + str(section)
else:
return "Row " + str(section)
def columnCount(self, parent=None):
return len(self.data[0])
def rowCount(self, parent=None):
return len(self.data)
def data(self, index: QModelIndex, role: int):
if role == QtCore.Qt.DisplayRole:
row = index.row()
col = index.column()
return str(self.data[row][col])
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
# data = [[11, 12, 13, 14, 15],
# [21, 22, 23, 24, 25],
# [31, 32, 33, 34, 35]]
data = np.random.random((10000, 100)) * 100
model = MyTableModel(data)
view = QtWidgets.QTableView()
view.setModel(model)
view.show()
sys.exit(app.exec_())

TA貢獻1735條經驗 獲得超5個贊
我建議創建一個 QStandardItem 的 numpy 數組并使用 appendColumn 函數填充模型:
start = time.time()
data = np.empty(rows, cols, dtype=object) # generate empty data-Array
#### Fill the data array with strings here ###
items = np.vectorize(QStandardItem)(data) # generate QStandardItem-Array
print(time.time() - start, "seconds to create items")
start = time.time()
# iterate over columns (because we have segneficantly less columns than rows)
for i in range(len(cols)):
self.myQTableModel.appendColumn(items[:,i])
self.myQTableModel.setHorizontalHeaderLabels(headerarray) # set headers
print(time.time()-start, "seconds to load DB")
16000 行和 7 列的結果:
0.346372127532959 seconds to create items
1.1745991706848145 seconds to load DB
添加回答
舉報