pyqt 多线程 例子

# -*- coding: utf-8 -*-
import sys
from PyQt5 import  QtWidgets, QtCore
import time, datetime




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

    def layout(self):
        self.setWindowTitle(u'The_Third_Wave:简单Threading教程')

        self.text_area_l = QtWidgets.QTextBrowser()
        self.thread_start_l = QtWidgets.QPushButton('Start Left')
        self.thread_start_l.clicked.connect(self.start_threads_l)
        self.text_area_r = QtWidgets.QTextBrowser()
        self.thread_start_r = QtWidgets.QPushButton('Start Right')
        self.thread_start_r.clicked.connect(self.start_threads_r)

        lef_layout = QtWidgets.QVBoxLayout()
        lef_layout.addWidget(self.text_area_l)

        button_layout = QtWidgets.QVBoxLayout()
        button_layout.addWidget(self.thread_start_l)
        button_layout.addWidget(self.thread_start_r)

        right_layout = QtWidgets.QVBoxLayout()
        right_layout.addWidget(self.text_area_r)

        grid_layout = QtWidgets.QGridLayout()
        grid_layout.addLayout(lef_layout, 0, 0)
        grid_layout.addLayout(button_layout, 0, 1)
        grid_layout.addLayout(right_layout, 0, 2)

        self.setLayout(grid_layout)

    def start_threads_l(self):
        thread = MyThread_l(self)  # 创建线程
        thread.trigger.connect(self.update_text_l)  # 连接信号!
        thread.setup(range(0, 10))  # 传递参数
        thread.start()  # 启动线程

    def update_text_l(self, message):
        self.text_area_l.insertPlainText(message)

    def start_threads_r(self):
        thread = MyThread_r(self)  # 创建线程
        thread.trigger.connect(self.update_text_r)  # 连接信号!
        thread.setup(range(10, 20))  # 传递参数
        thread.start()  # 启动线程

    def update_text_r(self, message):
        self.text_area_r.insertPlainText(message)


class MyThread_l(QtCore.QThread):
    trigger = QtCore.pyqtSignal(str)  # trigger传输的内容是字符串

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

    def setup(self, args):
        self.args = args

    def run(self):  # 很多时候都必重写run方法, 线程start后自动运行
        self.my_function()

    def my_function(self):
        # 把代码中的print全部改为trigger.emit
        # print u"线程启动了!"
        self.trigger.emit(u"左边线程启动了!\n")
        for i in self.args:
            time.sleep(3)
            self.trigger.emit(u"当前为:" + str(i) + "----" + str(datetime.datetime.now()) + "\n")
        self.trigger.emit(u"左边线程结束了!\n")


class MyThread_r(QtCore.QThread):
    trigger = QtCore.pyqtSignal(str)  # trigger传输的内容是字符串

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

    def setup(self, args):
        self.args = args

    def run(self):  # 很多时候都必重写run方法, 线程start后自动运行
        self.my_function()

    def my_function(self):
        # 把代码中的print全部改为trigger.emit
        self.trigger.emit(u"右边线程启动了!\n")
        for i in self.args:
            time.sleep(3)
            self.trigger.emit(u"当前为:" + str(i) + "----" + str(datetime.datetime.now()) + "\n")
        self.trigger.emit(u"右边线程结束了!\n")


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值