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

Python 导致整个程序在pyqt5中休眠的QThread,python,pyqt5,qthread,Python,Pyqt5,Qthread,这是我第一次尝试将QThreads子类化并在程序中使用它,但我得到了一些奇怪的东西。我不确定我的构造函数是否有错或类似的地方,但基本上当我运行QThread时,整个程序都会在QThread处于睡眠状态时休眠(不仅仅是线程) 例如,提供的代码将在3秒后打印“Hello there”,这是QThread应该睡眠的时间 如何修复代码,以便在程序运行时让线程在后台运行 from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import

这是我第一次尝试将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()

使用
start
而不是
run

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

    print("Hello there")
因为
run
是线程的最新版本(如果您不想在线程中重用代码,那么它就存在了)


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

来完成托勒密的回答,我可以与您分享我在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()

希望它能帮助你

为True时:
在GUI中?你能调整小部件的大小吗?我想,在你的代码中,GUI将被冻结,我将它作为一个起点,看看是否所有东西都在并行运行,但实际上,它可能没有得到优化。。。但它对我有用!它与优化无关,您的代码无法工作,因为它冻结了GUI。