zoukankan      html  css  js  c++  java
  • pyqt多线程QThread

    1. 多线程计算器

    '''
    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_())

    2. 定时任务

    '''
    动态显示当前时间
    QTimer   # 定时器
    QThread  # 多线程
    多线程:用于同时完成多个任务
    '''
    
    import sys
    
    from PyQt5.QtCore import QTimer, QDateTime
    from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QGridLayout, QLabel
    
    
    class ShowTime(QWidget):
    
        def __init__(self, parent=None):
            super(ShowTime, self).__init__(parent)
            self.setWindowTitle("动态显示当前时间")
    
            self.label = QLabel('显示当前时间')
            self.startBtn = QPushButton('开始')
            self.endBtn = QPushButton('结束')
            layout = QGridLayout()
    
            self.timer = QTimer()
            self.timer.timeout.connect(self.showTime)
    
            layout.addWidget(self.label, 0, 0, 1, 2)
            layout.addWidget(self.startBtn, 1, 0)
            layout.addWidget(self.endBtn, 1, 1)
    
            self.startBtn.clicked.connect(self.startTimer)
            self.endBtn.clicked.connect(self.endTimer)
    
            self.setLayout(layout)
    
        def showTime(self):
            time = QDateTime.currentDateTime()
    
            timeDisplay = time.toString("yyyy-MM-dd hh:mm:ss dddd")
            self.label.setText(timeDisplay)
    
        def startTimer(self):
            self.timer.start(1000)
            self.startBtn.setEnabled(False)
            self.endBtn.setEnabled(True)
    
        def endTimer(self):
            self.timer.stop()
            self.startBtn.setEnabled(True)
            self.endBtn.setEnabled(False)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        form = ShowTime()
        form.show()
        sys.exit(app.exec_())
    

      

  • 相关阅读:
    sublime设置node.js编译
    Markdown基本语法规范
    vue2.0学习笔记之组件
    使用let声明变量的理解
    vue2.0学习笔记之路由(二)路由嵌套+动画
    vue2.0学习笔记之路由(二)路由嵌套
    设置webstorm支持ES6语法
    vue2.0环境搭建
    bower包管理工具
    【转】jquery cookie操作
  • 原文地址:https://www.cnblogs.com/yoyo1216/p/14330172.html
Copyright © 2011-2022 走看看