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按鈕')
如果只寫一兩個槽函數可能不覺得,如果多了 這句話就可以省很多事。而且結構上會更清晰。
