Почему производительность PyQt5 QTableWidget намного быстрее, чем PySide2? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть данные с 1000 записями, отображаемыми в QTableWidget (13 столбцов), после обновления 4 раза я получаю setItem 52000 раз, а с использованием метода профиля pycharm время 52000 раз составляет 84 мс. После выхода PySide2 (Qt для Python 5.11 середина мая) я изменяю только «от PyQt5 ... import ...» на «от PySide2 ... import ...» для моей программы, время для 52000 раз 3171ms. Я знаю, что PyQt5 и PySide2 зависят от Qt5, но производительность шокировала. Я хочу использовать PySide2 для будущего с LGPL, как я могу это исправить?

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PySide2.QtWidgets import QApplication, QTableWidgetItem, QMainWindow, QTableWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(200, 300, 960, 540)
        self.table = QTableWidget()
        self.setCentralWidget(self.table)
        self.table.setRowCount(1000)
        self.horizontal_header = ["1", "2", "3", "4", "5", "6", "7",
                                  "8", "9", "10", "11", "12", "13"]
        self.table.setColumnCount(len(self.horizontal_header))
        self.table.setHorizontalHeaderLabels(self.horizontal_header)
        for i in range(4):
            self._run()
        raise NameError

    def _run(self):
        for row in range(1000):
            for column in range(13):
                item = QTableWidgetItem('1')
                self.table.setItem(row, column, item)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainwindow = MainWindow()
    mainwindow.show()
    sys.exit(app.exec_())
...