Ich versuche etwas zu machen analysiert eine Website und zeigt ihren Inhalt auf PyQt Widget.PyQt5 - Used QThread, um zu vermeiden, hängen, aber es passiert immer noch
Ich habe Logikteil abgeschlossen, aber IO-Task hängt die UI für ein paar Sekunden, macht progressbar nutzlos.
Also habe ich versucht, Threads zu verwenden, aber es hat nicht geholfen.
Hier vereinfacht Version von dem, was ich tue
Mainwindow ist Qt Designer erzeugt Klasse (I PyQt5 auf Python 3.4.4, Microsoft Windows 10 bin mit).
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()
Es gibt keine Fehler; es bleibt einfach hängen, bis der Job erledigt ist.
Bin ich pyqtSignal falsch? Entschuldigung für mein schlechtes Englisch.