【发布时间】:2020-04-28 05:48:40
【问题描述】:
看起来在包含具有大量项目数的 QComboBox 的小部件/窗口上调用 show 非常慢。
拿下面的 sn-p 比较一下使用 QComboBox 和 QTreeWidget 的性能
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from time import perf_counter
import sys
class MainWindowComboBox(QMainWindow):
def __init__(self, items, *args, **kwargs):
super().__init__(*args, **kwargs)
widget = QComboBox()
widget.addItems(items)
self.setCentralWidget(widget)
class MainWindowTreeWidget(QMainWindow):
def __init__(self, items, *args, **kwargs):
super().__init__(*args, **kwargs)
widget = QTreeWidget()
items = [QTreeWidgetItem([item]) for item in items]
widget.addTopLevelItems(items)
self.setCentralWidget(widget)
items = [f'item {i}' for i in range(100_000)]
app = QApplication(sys.argv)
window = MainWindowTreeWidget(items)
s = perf_counter()
window.show()
print('took', perf_counter()-s)
app.exec_()
我得到以下时间:
- 使用 QComboBOx -> 8.09s
- 使用 QTreeWidget -> 0.06s
使用 QComboBox 的速度要慢几个数量级。
【问题讨论】:
标签: python pyqt pyqt5 qcombobox