PyQt5学习笔记-04

自定义信号的emit

Posted by hmoytx on May 3, 2018

前言

有关信号与槽的简介可以看上篇文章

具体代码

这里主要是讲一下自定义信号的创建与发送。

import sys
from PyQt5 import QtWidgets, QtCore #需要导入QtCore
from demo import Ui_Form


class mainwindow(QtWidgets.QWidget, Ui_Form):

    signal_1 = QtCore.pyqtSignal(str) #定义一个信号,括号内的是传递参数的类型,可以有很多类型
    def __init__(self):
        super(mainwindow, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.send) #绑定按钮事件
        self.signal_1.connect(self.mysignal) #信号绑定到函数mysignal
    
    def send(self):
        print("123")
        self.tb.setText("")
        self.tb.append("------------")
        self.signal_1.emit("11111111111") #按钮点击后,send函数通过emit发送信号
    
    def mysignal(self, string):
        print(string)
        self.tb.append("----ok------")

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = mainwindow()
    window.show()
    sys.exit(app.exec_())

运行结果如下图 emit

注意

当信号与槽函数的参数数量相同时,它们参数类型要完全一致。当信号的参数与槽函数的参数数量不同时,只能是信号的参数数量多于槽函数的参数数量,且前面相同数量的参数类型应一致,信号中多余的参数会被忽略。此外,在不进行参数传递时,信号槽绑定时也是要求信号的参数数量大于等于槽函数的参数数量。这种情况一般是一个带参数的信号去绑定一个无参数的槽函数。 传递的参数类型有很多种:str、int、list、object、float、tuple、dict等等