第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 pyqt 中用數(shù)據(jù)快速填充 QTableView/Model

如何在 pyqt 中用數(shù)據(jù)快速填充 QTableView/Model

我正在尋找一種在 python 中用超過 10000 行數(shù)據(jù)填充 QTableModel 的快速方法。在雙 for 循環(huán)中迭代項(xiàng)目需要 40 多秒。
查看完整描述

2 回答

?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊

您不需要明確地將項(xiàng)目添加到 QTableModel,您可以圍繞現(xiàn)有數(shù)據(jù)結(jié)構(gòu)構(gòu)建自己的模型,例如列表列表或如下所示的 numpy 數(shù)組。


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_())


查看完整回答
反對(duì) 回復(fù) 2023-03-22
?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

我建議創(chuàng)建一個(gè) QStandardItem 的 numpy 數(shù)組并使用 appendColumn 函數(shù)填充模型:


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 列的結(jié)果:


0.346372127532959 seconds to create items

1.1745991706848145 seconds to load DB


查看完整回答
反對(duì) 回復(fù) 2023-03-22
  • 2 回答
  • 0 關(guān)注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)