所谓装饰器信号与槽,就是通过装饰器的方法来定义信号和槽函数。具体使用方法如下:
@PyQt5.QtCore.pyqtSlot(参数) def on_发送者对象名称_发射信号名称(self, 参数): pass
这种方法有效的前提是下面的函数已经执行:
QtCore.QMetaObject.connectSlotsByName(QObject)
在上面代码中,“发送者对象名称”就是使用setObjectName函数设置的名称,因此自定义槽函数的命名规则也可以看成:on + 使用 setObjectName设置的名称 + 信号名称。
具体的使用方法:
import sys from PyQt5.QtCore import pyqtSlot, QObject, QMetaObject from PyQt5.QtWidgets import QMainWindow, QWidget, QApplication, QPushButton, QMessageBox, QHBoxLayout class CustWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) self.okButton = QPushButton("OK", self) # 使用setObjectName设置对象名称 self.okButton.setObjectName("okButton") layout = QHBoxLayout() layout.addWidget(self.okButton) self.setLayout(layout) QMetaObject.connectSlotsByName(self) @pyqtSlot() def on_okButton_clicked(self): print("单击了 OK按钮") if __name__ == '__main__': app = QApplication(sys.argv) win = CustWidget() win.show() sys.exit(app.exec_())