QThread导致整个程序在pyqt5中休眠

时间:2019-07-29 15:29:47

标签: python pyqt5 qthread

这是我尝试尝试将QThreads子类化并在程序中使用它的第一次尝试,但是我有点奇怪。我不确定我的构造函数是错误的还是类似的东西,但是基本上,当我运行我的QThread时,整个程序都会在QThread休眠时休眠(而不仅仅是线程)

例如,提供的代码将在3秒钟后打印“ Hello there”(这是QThread应该休眠的时间)

如何修复代码,以便在程序运行时让线程在后台运行

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal
import time

class MyThread(QThread):
    def __init__(self):
        QThread.__init__(self)

    def __del__(self):
        self.wait()

    def run(self):
        self.sleep(3)
        print("Slept for 3 seconds")


def main():
    qThread = MyThread()
    qThread.run()

    print("Hello there")

main()

2 个答案:

答案 0 :(得分:2)

使用start而不是run

def main():
    qThread = MyThread()
    qThread.start()

    print("Hello there")

由于run是线程的starting point(在您想重用非线程代码的情况下存在),

start是启动线程本身的方法,因此它将依次调用run

答案 1 :(得分:-1)

要完成ptolemy0的答案,我可以与您分享我在Qt上练习使用的代码:

from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import  QWidget, QApplication
import sys, time

class MyThread(QThread):
    def __init__(self, parent=None):
        super(MyThread, self).__init__(parent)

    def __del__(self):
        self.wait()

    def run(self):
        while True:
            self.sleep(3)
            print("Slept for 3 seconds")

class Main(QWidget):

    def __init__(self, parent=None):

        super(Main,self).__init__(parent)

        qThread = MyThread()
        qThread.start()

        i=0
        while True:

            print(i)
            i+=1
            time.sleep(1)



def main():

    app = QApplication(sys.argv)
    example = Main()

    print("Hello there")
    sys.exit(app.exec())

main()

希望它可以为您提供帮助!