多线程
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) # 将数据传递给窗口。