pyqt做了一个简单的批量图像处理,线程里有一个for循环遍历文件夹里的所有图像,在这个过程中主界面会卡死,不能操作。
试了很多种方法,主要是写了一个线程类,然后改写它的run函数,都不能解决问题。
最后是必须用moveToThread才能分离线程。
这个过程中了解了QT的信号与槽。
线程发信号到槽函数,主程序接到信号自己执行后面的图像显示等操作,才成功分离了线程。
部分源码:
#线程部分
class Worker(QObject):
signal1 = Signal(str, float)
dir_path=''
def run(self):
filelist = os.listdir(self.dir_path) # 读取文件名列表
length = len(filelist)
i = 0
for fimg in filelist:
f = self.dir_path + '/' + fimg
i += 1
self.signal1.emit(f, i / length * 100)
QThread.sleep(1)
#主窗口构造
def __init__(self):
super(Ui_MainWindow,self).__init__()
self.setupUi(self)
self.slot_init()
self.mythread=QThread()
self.myworker=Worker()
self.myworker.moveToThread(self.mythread)
self.mythread.started.connect(self.myworker.run)
self.myworker.signal1.connect(self.showImg)