Important: Please read the Qt Code of Conduct -

QThread Freezes GUI

  • It is not completely freezing. However, when I do some heavy tasks in QThread, the GUI responds slowly. For instance,

    import sys
    from PySide2.QtCore import QThread
    from PySide2.QtWidgets import (QApplication, QWidget, PushButton,QComboBox, QVBoxLayout)
    class Task(QThread):
        def run(self):
            # some heavy tasks
            print('task started')
            k = 0
            for i in range(10000):
                for j in range(50000):
                    k += 1
            print('task finished')
    class Gui(QWidget):
        def __init__(self):
            layout = QVBoxLayout()
            button = QPushButton('click me')
            combobox = QComboBox()
            combobox.addItems(['1', '2', '3', '4', '5'])
        def do_task(self):
            self.thread = Task()
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Gui()

    Here is the example GIF animation.

    0_1535983667385_Peek 2018-09-03 22-05.gif

    However, if I use PyQt5 to run the script (replacing PySide2 module), the GUI response will not delay at all.

    0_1535984088340_Peek 2018-09-03 22-04.gif

    How could I make the GUI have more CPU resource or higher priority when there are other threads running at the same time?

    Testing environment: Python 3.6, PySide2 5.11.1, PyQt5 5.11.2, Kubuntu 18.04 64-bit.

  • Lifetime Qt Champion


    Looks like there's some problem with the PySide 2 implementation. You should check the bug report system to see if it's something known. If not, please consider opening a new report providing your example and as much details as possible about your current setup.