5、使用装饰器定义信号和槽函数
使用方法:
@PyQt5.QtCore.pyqtSlot(参数)
def on_发送者对象名称_发射信号名称(self,参数):
pass
使用方法有效的前提是下面函数执行的情况下:
QMetaObject.connectSlotsByName(QObecjt)
案例:
1 from PyQt5 import QtCore 2 from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton 3 import sys 4 5 class CustWidget(QWidget): 6 def __init__(self, parent = None): 7 super(CustWidget,self).__init__(parent) 8 9 self.okButton = QPushButton('OK', self) 10 # 使用setObjectName函数设置对象的名字,newButton 后面要用到 11 self.okButton.setObjectName('newButton') 12 layout = QHBoxLayout() 13 layout.addWidget(self.okButton) 14 self.setLayout(layout) 15 QtCore.QMetaObject.connectSlotsByName(self) 16 17 @QtCore.pyqtSlot() 18 def on_newButton_clicked(self): 19 print('单击了OK按钮') 20 21 # self.okButton.clicked.connect(self.newButton_clicked) 22 # 23 # def newButton_clicked(self): 24 # print('单击了OK按钮') 25 26 if __name__ == '__main__': 27 app = QApplication(sys.argv) 28 win = CustWidget() 29 win.show() 30 app.exec_() 31 # sys.exit(app.exec_())
下面这段代码的核心就是QtCore.QMetaObject.connectSlotsByName(self)
QtCore.QMetaObject.connectSlotsByName(self)
@QtCore.pyqtSlot() def on_newButton_clicked(self): print('单击了OK按钮')
与下面的写法效果一样:
# self.okButton.clicked.connect(self.newButton_clicked)## def newButton_clicked(self):# print('单击了OK按钮')
如果只写一两个槽函数可能不觉得,如果多了 这句话就可以省很多事。而且结构上会更清晰。