PyQt5中多线程的QThread的使用

# !/usr/bin/env Python3
# -*- coding: utf-8 -*-
# @Author   : 孙广庆:72076844
# @FILE     : test2.py
# @Time     : 2020/3/3 9:13
# @Software : PyCharm


import sys
from PyQt5.QtCore import Qt, QThread,pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout,QHBoxLayout


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()

        self.button = QPushButton('开始', self)
        self.button.clicked.connect(self.count_func)
        self.button_2 = QPushButton('停止', self)
        self.button_2.clicked.connect(self.stop_count_func)

        self.label = QLabel('0', self)
        self.label.setAlignment(Qt.AlignCenter)

        self.my_thread = MyThread()  # 实例化线程对象
        self.my_thread.my_signal.connect(self.set_label_func)   # 线程自定义信号连接的槽函数
       

        self.h_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h_layout.addWidget(self.button)
        self.h_layout.addWidget(self.button_2)
        self.v_layout.addWidget(self.label)
        self.v_layout.addLayout(self.h_layout)
        self.setLayout(self.v_layout)


    def stop_count_func(self):
        self.my_thread.is_on = False
        self.my_thread.count = 0

    def count_func(self):
        self.my_thread.is_on = True
        self.my_thread.start()#启动线程

    def set_label_func(self, num):
        self.label.setText(num)
        #由于自定义信号时自动传递一个字符串参数,所以在这个槽函数中要接受一个参数


class MyThread(QThread):#线程类
    my_signal = pyqtSignal(str)  #自定义信号对象。参数str就代表这个信号可以传一个字符串
    def __init__(self):
        super(MyThread, self).__init__()
        self.count = 0
        self.is_on = True


    def run(self): #线程执行函数
        # while self.is_on :
        print(self.count)
        self.count += 1
        self.my_signal.emit(str(self.count))  #释放自定义的信号
        #通过自定义信号把str(self.count)传递给槽函数

        self.sleep(1)  #本线程睡眠n秒【是QThread函数】


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())
发布了79 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/s_daqing/article/details/104634306
今日推荐