【发布时间】:2016-04-19 13:06:27
【问题描述】:
我正在尝试制作一些东西来解析网站并将其内容显示在 PyQt 小部件上。
我已经完成了逻辑部分,但是 IO 任务将 ui 挂了几秒钟,使进度条无用。
所以我尝试使用线程,但没有帮助。
这是我正在做的事情的简化版本(我在 Python 3.4.4、Windows 10 上使用 PyQt5)
MainWindow 是 Qt Designer 生成的类。
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()
没有错误;它只是挂起,直到工作完成。
我是否使用了 pyqtSignal 错误?对不起我的英语不好。
【问题讨论】: