【PyQt5】信號與槽+裝飾器定義槽函數


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM