1、线程3句话
#设置线程名称为q
q = threading.Thread(target=,ags=())#线程优先检索内层函数,target=线程目标函数
q.setDaemon(True)#线程守护,主断这也断
q.start()
2、自定义信号
自定义信号其实就是在传递参数
(定义信号->连接信号与槽->通过emit在需要的地方发出信号)
from PySide2.QtWidgets import QApplication, QTextBrowser
from PySide2.QtUiTools import QUiLoader
from threading import Thread
from PySide2.QtCore import Signal,QObject
# 自定义信号源对象类型,一定要继承自 QObject
class MySignals(QObject):
# 定义一种信号,两个参数 类型分别是: QTextBrowser 和 字符串
# 调用 emit方法 发信号时,传入参数 必须是这里指定的 参数类型
text_print = Signal(QTextBrowser,str)
# 还可以定义其他种类的信号
update_table = Signal(str)
# 实例化
global_ms = MySignals()
class Stats:
def __init__(self):
self.ui = QUiLoader().load('main.ui')
# 自定义信号的处理函数
global_ms.text_print.connect(self.printToGui)
def printToGui(self,fb,text):
fb.append(str(text))
fb.ensureCursorVisible()
def task1(self):
def threadFunc():
# 通过Signal 的 emit 触发执行 主线程里面的处理函数
# emit参数和定义Signal的数量、类型必须一致
global_ms.text_print.emit(self.ui.infoBox1, '输出内容')
thread = Thread(target = threadFunc )
thread.start()
def task2(self):
def threadFunc():
global_ms.text_print.emit(self.ui.infoBox2, '输出内容')
thread = Thread(target=threadFunc)
thread.start()
2、1 代码拆解--定义信号
class MySignals(QObject):
# 定义一种信号,两个参数 类型分别是: QTextBrowser 和 字符串
# 调用 emit方法 发信号时,传入参数 必须是这里指定的 参数类型
text_print = Signal(QTextBrowser, str)#在这里定义信号传递的参数
# 还可以定义其他种类的信号
update_table = Signal(str)
# 实例化对象
global_ms = MySignals()
2、2 代码拆解--连接信号和槽
class Stats:
def __init__(self):
self.ui = QUiLoader().load('main.ui')
# 自定义信号的处理函数
global_ms.text_print.connect(self.printToGui)#起连接作用
def printToGui(self, fb, text):#这个就是槽
fb.append(str(text))
fb.ensureCursorVisible()
2、3 代码拆解--发出信号
def task1(self):
def threadFunc():
# 通过Signal 的 emit 触发执行 主线程里面的处理函数
# emit参数和定义Signal的数量、类型必须一致
# emit可能就是用来声明发出信号的
global_ms.text_print.emit(self.ui.infoBox1, '输出内容')#信号发出
thread = Thread(target=threadFunc)
thread.start()