I am developing an interface with 3 QCombobox
on each row and the interface will include up to 50'000 rows. Each QCombobox
is filled with a list of 15'000 items.
The populating process is extremely slow.
Is it possible to speed up the process?
My current code populates QCombobox
for only 10 rows. At 10 rows, the process takes time and with 50'000 rows, the interface doesn't show.
Backend:
import sys
import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget,
QMessageBox, QDialog, QFileDialog
from frontend import Ui_MainWindow
class Ui_MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Ui_MainWindow, self).__init__(parent)
self.setupUi(self)
myList = ['AAA'] * 15000
for i in range(1, 10):
self.cb1 = QtWidgets.QComboBox()
self.cb2 = QtWidgets.QComboBox()
self.cb3 = QtWidgets.QComboBox()
self.cb1.addItems(myList)
self.cb2.addItems(myList)
self.cb3.addItems(myList)
self.gridLayout_2.addWidget(self.cb2,i,0)
self.gridLayout_2.addWidget(self.cb1,i,1)
self.gridLayout_2.addWidget(self.cb2,i,2)
if __name__ == '__main__':
app = QApplication(sys.argv)
current_path = os.getcwd()
app.processEvents()
prog = Ui_MainWindow()
prog.showMaximized()
sys.exit(app.exec_())
Frontend:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(606, 446)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 586, 385))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.gridLayout_3 =
QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
self.gridLayout_3.setObjectName("gridLayout_3")
self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2")
self.gridLayout_3.addLayout(self.gridLayout_2, 0, 0, 1, 1)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 606, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())