PyQt5——多线程、信号与槽

多线程、信号与槽之间经常在一起使用,单独的知识在之前的博客中详细介绍过了:https://blog.csdn.net/qq_41895747

今天聊一聊结合在一起使用

先看代码

# ——创建时间2019.2.18————
# 多线程、信号与槽

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys

class Main(QWidget):
    def __init__(self,parent=None):
        super(Main, self).__init__(parent)

        # 创建线程并设置名称、变量、信号与槽
        self.thread=MyThread()
        self.thread.setIdentity("thread1")
        self.thread.sinOut.connect(self.outText)
        self.thread.setVal(10)

    def outText(self,text):
        print(text)

class MyThread(QThread):
    sinOut=pyqtSignal(str)

    def __init__(self,parent=None):
        super(MyThread, self).__init__(parent)
        self.identity=None

    def setIdentity(self,text):
        self.identity=text

    def setVal(self,val):
        self.times=int(val)
        # 执行线程run方法
        self.start()

    def run(self):
        while self.times>0 and self.identity:
            # 发射信号
            self.sinOut.emit(self.identity+"==>"+str(self.times))
            self.times-=1

if __name__=="__main__":
    app=QApplication(sys.argv)
    main=Main()
    main.show()
    sys.exit(app.exec_())
# ——创建时间2019.2.18————
# 多线程、信号与槽

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys

class Main(QWidget):
    def __init__(self,parent=None):
        super(Main, self).__init__(parent)

        # 创建线程并设置名称、变量、信号与槽
        self.thread=MyThread()
        self.thread.setIdentity("thread1")
        self.thread.sinOut.connect(self.outText)
        self.thread.setVal(10)

    def outText(self,text):
        print(text)

class MyThread(QThread):
    sinOut=pyqtSignal(str)

    def __init__(self,parent=None):
        super(MyThread, self).__init__(parent)
        self.identity=None

    def setIdentity(self,text):
        self.identity=text

    def setVal(self,val):
        self.times=int(val)
        # 执行线程run方法
        self.start()

    def run(self):
        while self.times>0 and self.identity:
            # 发射信号
            self.sinOut.emit(self.identity+"==>"+str(self.times))
            self.times-=1

if __name__=="__main__":
    app=QApplication(sys.argv)
    main=Main()
    main.show()
    sys.exit(app.exec_())

下面是多线程实时时钟

# ——创建时间2019.2.18————
# 多线程、信号与槽

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
import time
import qdarkstyle

class BackendThread(QThread):
    # 通过类成员对象定义信号
    update_data=pyqtSignal(str)

    # 处理业务逻辑
    def run(self):
        while True:
            data=QDateTime.currentDateTime()
            currTime=data.toString("yyyy-MM-dd hh:mm:ss")
            self.update_data.emit(str(currTime))
            time.sleep(1)

class Window(QDialog):
    def __init__(self):
        QDialog.__init__(self)
        self.setWindowTitle("后台线程时钟")
        self.resize(400,200)
        self.input=QLineEdit(self)
        self.input.resize(400,100)
        self.initUI()

    def initUI(self):
        # 创建线程
        self.backend=BackendThread()
        # 连接信号
        self.backend.update_data.connect(self.handleDisplay)
        # 开始线程
        self.backend.start()

    # 将当前文本输出到文本框
    def handleDisplay(self,data):
        self.input.setText(data)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = Window()
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    main.show()
    sys.exit(app.exec_())

运行图:

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/87559415