自定义信号(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_())