Python PyQt5-使用QThread避免ui挂起,但仍然会发生

Python PyQt5-使用QThread避免ui挂起,但仍然会发生,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我试图让某个东西解析网站并在PyQt小部件上显示其内容 我已经完成了逻辑部分,但IO任务将ui挂起几秒钟,使progressbar变得无用 所以我尝试使用线程,但没有帮助 下面是我所做工作的简化版本(我在Python3.4.4和Windows10上使用PyQt5) MainWindow是Qt设计器生成的类 from PyQt5 import QtWidgets from PyQt5.QtCore import QThread, pyqtSignal class WorkerThread(QTh

我试图让某个东西解析网站并在PyQt小部件上显示其内容

我已经完成了逻辑部分,但IO任务将ui挂起几秒钟,使progressbar变得无用

所以我尝试使用线程,但没有帮助

下面是我所做工作的简化版本(我在Python3.4.4和Windows10上使用PyQt5)

MainWindow是Qt设计器生成的类

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

class WorkerThread(QThread):
    signal = pyqtSignal(str)

    def __init__(self, data):
        QThread.__init__(self)

        self.data = data

    def __del__(self):
        self.wait()

    def run(self):
        result = dosomeIOjob(self.data) # IO and parsing job, takes about 3 seconds
        sendsomething(result)

    def sendsomething(self, value):
        self.signal.emit(value)

class UIClass(QtWidgets.QMainWindow, MainWindow.Ui_MainWindow):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)

        self.button.clicked.connect(self.dosomejob)

    def dosomejob(self):
        data = self.lineedit_search.text()
        self.runworker(self, data)

    def settext(value):
        self.text.setText(value)

    def runworker(self, data):
        worker = WorkerThread(data)
        worker.signal.connect(self.settext)
        worker.run()
没有错误;它只是挂在工作完成之前

我使用PyQT信号错误吗?对不起,我的英语不好。

您需要传递类型(str),以便
settext
能够获取并使用它。我也一直使用start()而不是run()来启动线程,就像在
worker.start()中一样。我不确定这有什么不同,只是我是如何读/学的

这是您需要更改的代码。
worker.signal[str].connect(self.settext)

您需要传递类型(str),以便
settext
能够获取并使用它。我也一直使用start()而不是run()来启动线程,就像在
worker.start()中一样。我不确定这有什么不同,只是我是如何读/学的

这是您需要更改的代码。
worker.signal[str].connect(self.settext)