QMainWindow多线程demo

来源:互联网 发布:知乎回答怎么取消匿名 编辑:程序博客网 时间:2024/06/14 23:11


# -*- coding: utf-8 -*-from PyQt5 import QtWidgets, QtCoreimport sysfrom PyQt5.QtCore import *import time# 继承QThreadfrom PyQt5.QtWidgets import QMainWindow, QPushButtonclass Runthread(QThread):    # python3,pyqt5与之前的版本有些不一样    #  通过类成员对象定义信号对象    _signal = pyqtSignal(str)    def __init__(self, parent=None):        super(Runthread, self).__init__()    def __del__(self):        self.wait()    def run(self):        # 处理你要做的业务逻辑,这里是通过一个回调来处理数据,这里的逻辑处理写自己的方法        # wechat.start_auto(self.callback)        for i in range(2000000):            # 发出信号            self._signal.emit('当前循环值为:%s' % i)            # 让程序休眠            time.sleep(0.5)        # self._signal.emit("sdf");  #可以在这里写信号焕发    def callback(self, msg):        # 信号焕发,我是通过我封装类的回调来发起的        self._signal.emit(msg);class mywindow(QMainWindow):    def __init__(self):        super(mywindow, self).__init__()        self.setupUi()    def setupUi(self):        self.btn1 = QPushButton("Button 1", self)        self.btn1.setMaximumWidth(200)        self.btn1.move(30, 50)        btn2 = QPushButton("Button 2", self)        btn2.move(150, 50)        self.btn1.clicked.connect(self.start_login)        # self.btn1.clicked.connect(self.buttonClicked)        btn2.clicked.connect(self.start_login)        self.statusBar()        self.setGeometry(300, 300, 290, 150)        self.setWindowTitle('Event sender')        self.show()    def start_login(self):        # 创建线程        self.thread = Runthread()        # 连接信号        self.thread._signal.connect(self.callbacklog)        # 开始线程        self.thread.start()    def callbacklog(self, msg):        # 奖回调数据输出到文本框        self.btn1.setText("\n"+ msg+ "   "+                                  time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()));if __name__ == "__main__":    app = QtWidgets.QApplication(sys.argv)    myshow = mywindow()    myshow.show()    sys.exit(app.exec_())

原创粉丝点击