Метод start () PyQt5.QThread не выполняет метод run()

Я начинаю изучать PyQt5 и Qthread и пытаюсь сделать простую реализацию QThread, я знаю, что это очевидно, но я не могу понять, почему это не работает

мой код:

from PyQt5 import QtCore


class WorkingThread(QtCore.QThread):
    def __init__(self):
        super().__init__()

    def run(self):
        print(" work !")


class MainWindow(QtCore.QObject):

    worker_thread = WorkingThread()

    def engage(self):
        print("calling start")
        self.worker_thread.start()


if __name__ == "__main__":
    main = MainWindow()
    main.engage()

выход:

вызов начала

Процесс завершен с кодом выхода 0

нет работы!" печатные

1 ответ

Решение

Многим элементам Qt нужен корректный цикл событий для правильной работы, и в этом случае QThread, так как в этом случае нет графического интерфейса, уместно создать QCoreApplication:

from PyQt5 import QtCore


class WorkingThread(QtCore.QThread):
    def run(self):
        print(" work !")


class MainWindow(QtCore.QObject):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.worker_thread = WorkingThread()

    def engage(self):
        print("calling start")
        self.worker_thread.start()


if __name__ == "__main__":
    import sys

    app = QtCore.QCoreApplication(sys.argv)
    main = MainWindow()
    main.engage()
    sys.exit(app.exec_())
Другие вопросы по тегам