类似于动态窗口小部件数组的表上的pyqt性能问题

时间:2019-10-21 18:17:57

标签: pyqt pyqt5

我有一个使用自定义QStyledItemDelegate,QTableView和QAbstractModel的GUI来显示我在启动时加载的记录。

每条记录显示为一行小部件。每列都与特定的窗口小部件类型相关联。即一个QDateEdit,一个QTimeEdit,几个QLineEdit,3个QComboBox。

如果我尝试加载约2500条记录,则GUI需要花费很多时间来加载,并且在使用某些过滤器时也要适应更改。滚动并不算太糟糕,所以我怀疑在添加或删除小部件行时,我的工作效率可能不高。

行添加始终是一个追加。行删除无处不在。

这些是我模型中的实现:

    def row_append(self, count=1, parent=QtCore.QModelIndex()):
        rows = self.rowCount()
        last = rows + count - 1
        self.layoutAboutToBeChanged.emit()
        self.beginInsertRows(parent, rows, last)
        self.insertRows(rows, count, parent) # Implemented in my model
        self.endInsertRows()
        self.layoutChanged.emit()
        for column in range(self.columnCount()):
            self.table_view.enable_cell(rows, column)
        return self.rowCount() - count



    def row_delete(self, row, count=1, parent=QtCore.QModelIndex()):
        last = row + count - 1
        self.layoutAboutToBeChanged.emit()
        self.beginRemoveRows(parent, row, last)
        self.removeRows(row, count, parent)  # Implemented in my model
        self.endRemoveRows()
        self.layoutChanged.emit()

我的insertRows和removeRows版本的实现细节不相关,因为我可以解决。

如果我收到500次插入或351次删除,则将调用这些函数。

我的问题是,当您收到大量导致当前显示的大部分内容发生变化的事物时,是否应该这样做?

我记得读过一篇文章,如果您必须进行重大更改,那么破坏所有内容并从头开始重建可能会更容易,但是:

  1. 我使用错误的方法(例如使用和实现的功能)破坏了一切吗?同样,当我从头开始重建所有内容时。
  2. 难道是我要为pyqt制作太重的东西吗?

0 个答案:

没有答案