Многопоточность в pyqt5

Как можно реализовать в нём многопоточность? Стандартный threading не работает, а если просто так - медленно прогружается форма.

Есть такой код:

class Main(QWidget):
def __init__(self):
    super().__init__()
    self.initUI()

def initUI(self):
    self.hline = QVBoxLayout()
    self.tex = QLabel('Lorem ipsum dolor sit amet')
    self.hline.addWidget(self.tex)
    self.setLayout(self.hline)

    
    for _ in range(4):
        app = QGroupBox()
        h = QHBoxLayout()
        app.setLayout(h)
        for q in range(4):
            appp = QGroupBox(str(q))
            v = QVBoxLayout()
            appp.setLayout(v)
            image= QLabel()
            getweb = QImage()
            getweb.loadFromData(requests.get('изображение').content)
            pixmap = QPixmap(getweb)
            image.setPixmap(pixmap)
            image.setMaximumSize(64, 64)
            v.addWidget(image)
            h.addWidget(appp)
        self.hline.addWidget(app)

Ответы (1 шт):

Автор решения: S. Nick

QApplication.processEvents() - обрабатывает некоторые ожидающие события для вызывающего потока. Вы можете иногда вызывать эту функцию, когда ваша программа занята выполнением длительной операции.

import sys
import requests
from PyQt5.Qt import *


class Main(QWidget):
    def __init__(self):
        super().__init__()
        self.images = [
            'https://www.python.org/static/img/python-logo.png',
            'https://laguna-akul.ru/upload/003/u379/f4/61/8f68d93a.jpg',
            'http://www.google.com/favicon.ico',
            'https://img.icons8.com/ios/452/phone.png',
        ]
        self.hline = QVBoxLayout(self)
        self.tex = QLabel('Lorem ipsum dolor sit amet')
        self.hline.addWidget(self.tex, alignment=Qt.AlignHCenter | Qt.AlignTop)
        
#        self.initUI()
        QTimer.singleShot(0, self.initUI)                                 # !!!

    def initUI(self):
        for _ in range(4):
            app = QGroupBox(f'Hello GroupBox {_+1}')
            h = QHBoxLayout(app)
            self.hline.addWidget(app) 
            self.hline.addStretch(_)

#            for q in range(4):
            for q, href in enumerate(self.images):                         # !!!
                appp = QGroupBox(str(q+1))
                v = QVBoxLayout(appp)
                image = QLabel()
                getweb = QImage()
                getweb.loadFromData(requests.get(href).content)
                pixmap = QPixmap(getweb)
                image.setPixmap(pixmap.scaled(64, 64, Qt.KeepAspectRatio)) # !!!
#                image.setMaximumSize(64, 64)
                
                v.addWidget(image, alignment=Qt.AlignCenter)
                h.addWidget(appp, alignment=Qt.AlignLeft)
                
                QApplication.processEvents()                              # !!!!!!
        
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setFont(QFont("Times", 12, QFont.Bold))
    w = Main()
    w.resize(400, 600)
    w.show()
    sys.exit(app.exec_())        

введите сюда описание изображения

→ Ссылка