当前位置: 首页 PyQt5中事件处理机制及信号和槽之间的通信交互 自定义信号(pyqtSignal)的原理和方法
add-vip

自定义信号(pyqtSignal)的原理和方法

一、学习指导

自定义信号是通过pyqtSignal函数以类属性的方式在被重写的类内部实现的,这里的类属性和实例属性一定要区分清楚,不能再pyqtSignal之前加self。pyqtSignal()函数也可以传递不同的参数。通过本课学习要记住信号的定义原理和方法,再结合之前我们使用的一些内置信号,对于软件的开发有很大帮助,这也是PyQt5之所以强大的原因之一。

二、代码演示

from PyQt5.Qt import *
import sys


class Btn(QPushButton):
    rightSignal = pyqtSignal()  # 先定义好一个信号,然后寻找这个信号所属事件

    def mousePressEvent(self, evt):
        super().mousePressEvent(evt)
        # print(evt.button())  # QMouseEvent
        # if evt.button() == 2:
        if evt.button() == Qt.RightButton:
            # print('鼠标右键被按下')  # 这是用来测试右键是否生效,不是槽函数功能
            self.rightSignal.emit()  # 通过emit函数来把之定义的信号发射出去
        pass


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("自定义信号的原理和方法")
        self.resize(600, 500)
        self.func_list()

    def func_list(self):
        self.func()

    def func(self):
        # btn = QPushButton(self)
        btn = Btn(self)
        btn.setText('按钮')
        btn.move(200, 100)

        def btn_press():
            print('鼠标被按下')
        # btn.pressed.connect(btn_press)
        btn.rightSignal.connect(btn_press)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())


相关文章