訊號與槽-裝飾器
阿新 • • 發佈:2020-08-10
所謂裝飾器訊號與槽,就是通過裝飾器的方法來定義訊號和槽函式。具體使用方法如下:
@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_())