问题:点击<开始>按钮后加载模型计算,pyqt界面卡住等待计算结束。目的是添加进度条,优化用户等待。一开始以为添加进度条加上时钟就行,调试后发现把计算部分写在主界面类里,计算和进度条无法一起进行。
解决:需要把计算部分分离出去另起一个线程。
线程类的结构
以我程序所写的线程类为参考如下
from PyQt5.QtCore import *
class MyCal(QThread):
#自定义一个信号名
cal_signal = pyqtSignal(np.ndarray, np.ndarray) #定义信号返回的数值类型
#构造函数
def __init__(self, model, img, parent=None): #model为传入的模型,img为传入的要处理的图片
super(MyCal, self).__init__(parent)
self.work = True
self.model = model
self.cam_image = img
#析构函数
def __del__(self):
self.work = False
self.wait()
#该线程主程序
def run(self):
mask, overley = self.model.predict(self.cam_image)
self.cal_signal.emit(mask, overley) #发射信号,传参数
在主线程界面中调用上面的线程 并 设置进度条时钟
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.ui = Ui_Ma