pyqt主线程给子线程传递参数的方法
由于自己做的pyqt界面经常出现假死,本人实在不堪其扰,所以想学一下多线程。
话不多说,直接进入正题。
我们都知道子线程给ui主线程传递参数可以通过pyqtsignal方式来传递,但是主线程给子线程传递参数却很少人用
#方法一:全局变量法
import cv2
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal, QDateTime
from PyQt5.QtWidgets import QApplication, QDialog, QLineEdit, QMainWindow
import time
import sysfrom PyQt5.uic import loadUi
global singal#这就是全局变量,在主函数中修改其值,然后在子函数中获取其值,那么相当于传递参数了
#方法二:子线程类中的定义一个成员变量,这样的方法肯定比第一个好许多,有效防止变量被其他线程篡改
class BackendThread(QThread):# 通过类成员对象定义信号对象update_date = pyqtSignal(str,int)path=None# 处理要做的业务逻辑def setPath(self,path):#专门定义一个方法将主线程的参数传给子线程self.path=pathdef run(self):while True:data = QDateTime.currentDateTime()currTime = data.toString("yyyy-MM-dd hh:mm:ss")self.update_date.emit(str(currTime),5)time.sleep(1)#print(self.path)
这是一个时钟线程类,我们需要将ui进程的path值传入此类中的path值,从而根据path的不同,执行不同的方法
class MainWindow(QMainWindow):def __init__(self):super().__init__()loadUi('TimeShow.ui', self)self.initUI()def initUI(self):# 创建线程self.backend = BackendThread()#self.backend.setPath("")# 连接信号self.backend.update_date.connect(self.handleDisplay)self.backend.path="./test.jpg"#也可以将子线程中的成员变量直接赋值self.backend.setPath("./test.jpg")#通过成员变量的方法赋值# 开始线程self.backend.start()def handleDisplay(self, data,number):#参数位置和signal位置一样,信号内的变量自动给到函数,相对位置也不变self.label.setText(data)#print(number)
self.backend.path="./test.jpg"#也可以将子线程中的成员变量直接赋值
self.backend.setPath("./test.jpg")#通过成员变量的方法赋值
以上两行就是赋值的方法
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
