pyqtSignal多个信号处理, 与平常用到的函数处理方式有点不太一样,理解起来,有点别扭,不过既然别人已经设计成这样, 我们也只能按这个套路来了。 下面是在一个类里面的一种
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
class mywindow(QWidget):
sig=pyqtSignal(str,str,str)# 定义一个类变量(pyqtSignal 是QT里面的一个属性,里面有三个参数, 说明可以控制三个UI界面上的控件)
def __init__(self):
super().__init__()
self.resize(500,400)
self.btn_close = QPushButton('close',self)# 这个按钮被点击,就会触发信号处理函数Emit(20行)与output(23行)的运行
self.line_edit=QLineEdit(self)#包含下面2个共3个输入框,来接收sig(4行)的信号
self.line_edit_1=QLineEdit(self)
self.line_edit_2=QLineEdit(self)
self.line_edit.move(200,300)# 输入框坐标
self.line_edit_1.move(200,100)
self.line_edit_2.move(200,200)
self.btn_close.clicked.connect(self.Emit)#点击按钮后先连到Emit函数,此处将实际参数作为信号传入sig,
self.sig.connect(self.output)# sig本身为虚拟信号,此处可看作是虚拟信号的输出
def Emit(self):
'''此处可作是信号的输入(实际的变量传入sig这个类变量)'''
self.sig.emit('first','second','third')
def output(self,a, b ,c ):
'''此处可作是信号的输出(将处理好的信号内容输出到想要的地方)'''
self.line_edit.setText(f'a ={a}')
self.line_edit_1.setText(f'b ={b}')
self.line_edit_2.setText(f'c ={c}')
app=QApplication([])
main=mywindow()
main.show()
app.exec()
下面是另外一种, 信号函数与主函数分开的,如股票数据的实时显示就用到这一种了。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import time
class BackendThread(QThread):
# 通过类成员对象定义信号对象
sig = pyqtSignal(str,str,str)
# 处理要做的业务逻辑
def run(self):
while True:
data = QDateTime.currentDateTime()
currTime = data.toString("yyyy-MM-dd hh:mm:ss")
self.sig.emit(str(currTime), 'second signal','third signal')
time.sleep(1)
class mywindow(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.resize(500,400)
self.btn_close = QPushButton('close',self)# 这个按钮被点击,就会触发信号处理函数Emit(20行)与output(23行)的运行
self.line_edit=QLineEdit(self)#包含下面2个共3个输入框,来接收sig(4行)的信号
self.line_edit_1=QLineEdit(self)
self.line_edit_2=QLineEdit(self)
self.line_edit.move(200,300)# 输入框坐标
self.line_edit_1.move(200,100)
self.line_edit_2.move(200,200)
self.bkthread=BackendThread()
#self.btn_close.clicked.connect(self.bkthread.run)#点击按钮后先连到Emit函数,此处将实际参数作为信号传入sig,
self.bkthread.sig.connect(self.output)# sig本身为虚拟信号,此处可看作是虚拟信号的输出
self.bkthread.start()# 开始线程
def output(self,a, b ,c ):
'''此处可作是信号的输出(将处理好的信号内容输出到想要的地方)'''
self.line_edit.setText(f'a ={a}')
self.line_edit_1.setText(f'b ={b}')
self.line_edit_2.setText(f'c ={c}')
app=QApplication([])
main=mywindow()
main.show()
app.exec()