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