图像处理 PyQt 应用程序中的线程方法

threading method in imageprocessing PyQt application

我开发了一个程序,它不断地 "watching" 一个特定的文件夹,当一些图像被复制到那个文件夹时,从另一个 class 调用一个函数并开始处理。问题是这些图像很大,所以每当图像处理功能启动时,ui 就会冻结,直到过程结束。我了解到 QThread 可能是解决方案,但是当我在 class...

中有很多功能时,我不知道如何应用它

更具体的,请看步骤顺序。

class Main(QtGui.QMainWindow):
    def __init__():

    functions = Functions()
    ...
    self.something.signal.connect(self.functions.doStuff)

class Functions(QtCore.QObject):
    def __init__():

    imProc = ImageProcessing() 

    def doStuff():
        initialImage = loadimage(...)
        processedImage = imProc.process1(initialImage)

class ImageProcessing(QtCore.QObject) 
    def __init__(): 

    def process1(original_image):
        do maximum likelihood on the image
        return segmented image

    def process2(original_image):

        do another image processing task
        return segmented image

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    main.exec_()

问题是当 process1() 运行 主 window 冻结时...请问如何 运行 process1() 在后台与ui?

提前致谢!

好的,我明白了。我给出了一个通用的描述,我是如何解决它的:

首先是我的 ImageProcessing class...

class ImageProcess(QtCore.QThread):
    def __init__(self):
        QtCore.QThread.__init__(self)

    def __del__(self):
        self.exiting = True
        self.wait()

    def run(self):
        #machine learning algorithm, which results a processed image...
        self.emit( QtCore.SIGNAL('image'), processedImage) 
        return 

我有我的功能class...

class Functions(QtCore.QObject):
    def __init__():

        self.improc = ImageProcess()
        self.connect(self.improc, SIGNAL("image"), self.processImage)

        self.segmented_image = []

        self.improc.setPath(self.image)
        self.improc.start()

    def processImage(self,seg_img):    
        self.segmented_image = seg_img

然后像往常一样设置 QMainWindow...

希望它对正在使用 Qthread、信号槽应用程序的人有所帮助...