【发布时间】:2017-10-18 16:44:40
【问题描述】:
我有一个 pyqt GUI 和一个方法 [BigramClassification()],它会导致 GUI 挂起几秒钟。因此,我发现需要使用线程。所以在阅读了几个教程后,我想出了以下代码。
import sys,os
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QThread
import time
class MyForm(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.lblHistory.setPixmap(QtGui.QPixmap(os.getcwd() + "/historygraph.png"))
self.workerThread=WorkingThread()
self.ui.pushButton.clicked.connect(self.generateDetails)
self.ui.btnsubmitsettings.clicked.connect(self.addDetails)
def generateDetails(self):
self.workerThread.start()
self.ui.lblHistory.setPixmap(QtGui.QPixmap(os.getcwd() + "/historygraph.png"))
self.addPiechart()
self.addWordCloud()
self.summaryText()
def addPiechart(self):
print ("Added")
def addWordCloud(self):
print ("Added")
def addDetails(self):
def summaryText(self):
print("Added")
class WorkingThread(QThread):
def __init__(self, parent=None):
super(self.__class__, self).__init__(parent)
def run(self):
BigramsClassifier()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyForm()
myapp.show()
sys.exit(app.exec_())
我遇到的问题是,当我运行它并单击pushButton 时,线程启动但也执行start() 之后的方法,如def generateDetails(self): 中所示,我需要准备此代码,以便@987654327 中的方法@在线程执行完毕后执行,重方法BigramClassification()execution。
总结我怎样才能停止def generateDetails(self):中方法的自动执行,但只有在方法BigramClassification()完成之后。
EDIT 当我尝试关闭 GUI 时会抛出此错误。
【问题讨论】:
标签: python-3.x multithreading pyqt4 qthread