gpt4 book ai didi

python-3.x - 线程化PyQT GUI的方法

转载 作者:行者123 更新时间:2023-12-03 12:54:28 24 4
gpt4 key购买 nike

我有一个pyqt GUI和一个导致GUI挂起几秒钟的方法[BigramClassification()]。因此,我发现需要使用线程。因此,在阅读了一些教程之后,我想到了以下代码。

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):所示,我需要准备此代码,以便 def generateDetails(self):中的方法在线程完成重载后执行方法 BigramClassification()执行。

摘要如何停止 def generateDetails(self):中的方法的自动执行,但是仅在方法 BigramClassification()完成后才可以。

编辑当我尝试关闭GUI时抛出此错误。

enter image description here

最佳答案

将插槽连接到线程的finished信号,该信号可以在长时间运行的任务完成后执行其他操作:

class MyForm(QtGui.QMainWindow):    
def __init__(self, parent=None):
...
self.workerThread = WorkingThread()
self.workerThread.finished.connect(self.doOtherStuff)
...

def generateDetails(self):
if not self.workerThread.isRunning():
self.workerThread.start()

def doOtherStuff(self):
self.ui.lblHistory.setPixmap(QtGui.QPixmap(os.getcwd() + "/historygraph.png"))
self.addPiechart()
self.addWordCloud()
self.summaryText()

关于python-3.x - 线程化PyQT GUI的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46815230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com