下面包含了对pyqtSignal的基础使用,包括多参数
因为较为简单,就当作参考书吧~~
然后信号可以接收多个信号源哦~下面也有举例 (mousePressEvent 和 buttonClicked2)
import sys from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QMainWindow, QHBoxLayout from PyQt5.QtCore import Qt, pyqtSignal class CMainWindow(QMainWindow): signalTest = pyqtSignal() signalTest1 = pyqtSignal(str) signalTest2 = pyqtSignal(float, float) def __init__(self): super().__init__() # 确认PushButton设置 btn = QPushButton("无参信号") btn.clicked.connect(self.buttonClicked) btn1 = QPushButton("单参信号") btn1.clicked.connect(self.buttonClicked1) btn2 = QPushButton('双参信号') btn2.clicked.connect(self.buttonClicked2) hBox = QHBoxLayout() hBox.addStretch(1) hBox.addWidget(btn) hBox.addWidget(btn1) hBox.addWidget(btn2) widget = QWidget() self.setCentralWidget(widget) widget.setLayout(hBox) self.signalTest.connect(self.signalNone) self.signalTest1.connect(self.signalOne) self.signalTest2.connect(self.signalTwo) self.setWindowTitle('pysignal的使用') self.show() def signalNone(self): print("无参信号,传来的信息") def signalOne(self, arg1): print("单参信号,传来的信息:", arg1) def signalTwo(self, arg1, arg2): print("双参信号,传来的信息:", arg1, arg2) def mousePressEvent(self, event): self.signalTest2.emit(event.pos().x(), event.pos().y()) def buttonClicked(self): self.signalTest.emit() def buttonClicked1(self): self.signalTest1.emit("我是单参信号传来的") def buttonClicked2(self): self.signalTest2.emit(0, 0) def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: self.close() if __name__ == '__main__': app = QApplication(sys.argv) MainWindow = CMainWindow() sys.exit(app.exec_())
from PyQt5.QtCore import QObject , pyqtSignal class CustSignal(QObject): #声明无参数的信号 signal1 = pyqtSignal() #声明带一个int类型参数的信号 signal2 = pyqtSignal(int) #声明带int和str类型参数的信号 signal3 = pyqtSignal(int,str) #声明带一个列表类型参数的信号 signal4 = pyqtSignal(list) #声明带一个字典类型参数的信号 signal5 = pyqtSignal(dict) #声明一个多重载版本的信号,包括带int和str类型参数的信号和带str类型参数的信号 signal6 = pyqtSignal([int,str], [str]) def __init__(self,parent=None): super(CustSignal,self).__init__(parent) #将信号连接到指定槽函数 self.signal1.connect(self.signalCall1) self.signal2.connect(self.signalCall2) self.signal3.connect(self.signalCall3) self.signal4.connect(self.signalCall4) self.signal5.connect(self.signalCall5) self.signal6[int,str].connect(self.signalCall6) self.signal6[str].connect(self.signalCall6OverLoad) #发射信号 self.signal1.emit() self.signal2.emit(1) self.signal3.emit(1,"text") self.signal4.emit([1,2,3,4]) self.signal5.emit({"name":"tao","age":"25"}) self.signal6[int,str].emit(1,"text") self.signal6[str].emit("text") def signalCall1(self): print("signal1 emit") def signalCall2(self,val): print("signal2 emit,value:",val) def signalCall3(self,val,text): print("signal3 emit,value:",val,text) def signalCall4(self,val): print("signal4 emit,value:",val) def signalCall5(self,val): print("signal5 emit,value:",val) def signalCall6(self,val,text): print("signal6 emit,value:",val,text) def signalCall6OverLoad(self,val): print("signal6 overload emit,value:",val) if __name__ == '__main__': custSignal = CustSignal() 运行结果:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
长按识别二维码并关注微信
更方便到期提醒、手机管理