多线程


1.前言

在做大创项目的时候需要边识别图片,并将进度时刻返回到窗口中,更新进度条的值。在识别完之后,将识别的结果插入到数据库中。然后关闭进度条窗口。

2.主窗口

主窗口点击按钮开始进行检测,将检测结果更新到table中,连接响应,然后开始窗口,在进行窗口的run方法。

self.beginWindow = Ui_Bigin(args=args)
self.beginWindow.signalArges.connect(self.updateTable)
self.beginWindow.show()
self.beginWindow.run()

3.子窗口

class Ui_Bigin(QWidget):
    self.beginThread = BeginThread(args=a)
    self.beginThread.signal.connect(self.updateValue)
    self.beginThread.signalArges.connect(self.add)
    
    def run(self):
        message(u"开始进行识别,请耐心等待!", "info")
        self.beginThread.start()
        
    def updateValue(self, value):
        self.progressBar.value = int(value)
        if self.progressBar.value < 100:
            return
        message(u"识别完成!!!", "success")
        
    def add(self, args):
        self.addDiscern()
        self.label.setText('正在增加数据,请耐心等待')
        args['time'] = self.time
        args['route'] = self.route
        addFixture(args=args)
        message(u"增加数据成功!!!", "success")
        self.signalArges.emit(args)
        self.close()

4.线程

这里只展示信号相关的代码。

class BeginThread(QThread):  # 线程类
    signal = pyqtSignal(float)
    signalArges = pyqtSignal(dict)
    # 省去识别过程
    # run方法
        self.signal.emit(process * 100 / len(dataset)) # 将进度传给窗口
        self.sleep(5) # 等待五秒 避免太快数据冲突
        self.signalArges.emit(data) # 将数据传递给窗口。