多线程、信号与槽之间经常在一起使用,单独的知识在之前的博客中详细介绍过了: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_())
运行图: