pyqt多线程QThread
''' start():启动线程 wait():阻止线程,直到满足如下条件之一 (1)与此QThread对象关联的线程已完成执行(即从run返回时),如果线程完成执行,此函数返回True,如果线程尚未启动,也返回True (2)等待时间的单位是毫秒,如果时间是ULONG_MAX(默认值·),则等待,永远不会超时(线程必须从run返回),如果等待超时,此函数将会返回False sleep():强制当前线程睡眠多少秒 QThread类中的常用信号 started:在开始执行run函数之前,从相关线程发射此信号 finished:当程序完成业务逻辑时,从相关线程发射此信号 ''' import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * sec = 0 class WorkThread(QThread): # 创建多个任务可以建多个 WorkThread(QThread) 后面启动 timer = pyqtSignal(str) # 每隔1秒发送一次信号 str:可以传递参数 end = pyqtSignal(str) # 计数完成后发送一次信号 def run(self): while True: self.sleep(1) # 休眠1秒 if sec == 5: self.end.emit(str(sec)) # 发送end信号 str:可以传递参数 break self.timer.emit(str(sec)) # 发送timer信号 str:可以传递参数 class Counter(QWidget): def __init__(self, parent=None): super(Counter, self).__init__(parent) self.setWindowTitle("使用线程类(QThread)编写计数器") self.resize(300, 120) layout = QVBoxLayout() self.lcdNumber = QLCDNumber() layout.addWidget(self.lcdNumber) button = QPushButton('开始计数') layout.addWidget(button) self.workThread = WorkThread() self.workThread.timer.connect(self.countTime) self.workThread.end.connect(self.end) button.clicked.connect(self.work) self.setLayout(layout) def countTime(self, secs): global sec sec += 1 print(secs) self.lcdNumber.display(sec) def end(self, secs): print(secs) QMessageBox.information(self, '消息', '计数结束', QMessageBox.Ok) def work(self): self.workThread.start() # 多个任务可以创建多self.workThread.start() if __name__ == "__main__": app = QApplication(sys.argv) form = Counter() form.show() sys.exit(app.exec_())
评论回复