python的多线程通讯,在子线程里面更新数据,更新主线程的数值框,lcd等 有的时候回程序卡死,有的时候回数据卡在一个状态不变,这时候变化一下桌面大小,或者点击个按钮什么的,才会继续显示数据更新,所以在使用的时候,就需要在异步里面发送信号,在主线程里面更新页面。
这个是信号类
from PyQt5.QtCore import QThread, pyqtSignal
class pyqt_signal(QThread):
signal = pyqtSignal() # 括号里填写信号传递的参数
def __init__(self):
super().__init__()
def run(self):
# 进行任务操作
self.signal.emit() # 发射信号
在主程序里面引用这个类
class MainWindow(QMainWindow, ui):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.init_ui()
self.init_connect()
def init_ui(self):
self.singel = pyqt_signal()
def init_connect(self):
"""
初始化事件连接
"""
self.singel.signal.connect(self.update_date)
self.btn_start.clicked.connect(self.readdata)
def readdata(self,):
# 异步执行readai
s1 = threading.Thread(target=self.read_ai)
s1.start()
# 1-1000增加 在主界面更新
def read_ai(self):
t = 0
while 1
t+=1
self.csv_date = [t,t,t]
if t>1000:
break
self.singel.start()
def update_date(self,):
"""
同过pyqtsingel 刷新数据
"""
self.val_R.setValue(self.csv_date[0])
self.val_G.setValue(self.csv_date[1])
self.val_B.setValue(self.csv_date[2])
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
app.setStyleSheet(open("./data/steel.qss", "rb").read().decode("utf-8"))
uii = MainWindow()
uii.show()
sys.exit(app.exec_())
-
实例化类
self.singel = pyqt_signal() -
绑定事件 对象.属性 绑定方法
self.singel.signal.connect(self.update_date) -
事件开始 在异步里面 触发信号,对象.start()
self.singel.start()