1. 程式人生 > 其它 >3.5 裝飾器訊號與槽

3.5 裝飾器訊號與槽

一、裝飾器訊號與槽

1.基本概念

  • 通過裝飾器的方法來定義訊號和槽函式
  • 具體使用方法:
    這種方法的使用的前提是QMetaObject.connectSlotsByName(QObject)已經執行
@PyQt5.QtCore.pyqtSlot(引數) 
def on_傳送者物件名稱(就是)_發射訊號名稱(self,引數): 
   pass
  • 自動識別
    多加一行程式碼:
# #自動識別 多加下面一行
   self.okButton.clicked.connect(self.okButton_clicked)

#槽定義上名稱發生改變,並且去除直譯器
 def okButton_clicked(self) :
       print("點選了OK按鈕")

2.程式碼

點選檢視程式碼
# -*- coding: utf-8 -*-

"""
    【簡介】
    訊號和槽的自動連線例子


"""

from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton
import sys


class CustWidget(QWidget) :

    def __init__(self, parent=None) :
        super(CustWidget, self).__init__(parent)

        self.okButton = QPushButton("OK", self)
        # 使用setObjectName設定物件名稱
        self.okButton.setObjectName("okButton")
        layout = QHBoxLayout()
        layout.addWidget(self.okButton)
        self.setLayout(layout)
        QtCore.QMetaObject.connectSlotsByName(self)
        # #自動識別 多加下面一行
        # self.okButton.clicked.connect(self.okButton_clicked)
   
    #直譯器
    @QtCore.pyqtSlot()
    def on_okButton_clicked(self) :
        print("點選了OK按鈕")

    # #自動識別
    # def okButton_clicked(self) :
    #     print("點選了OK按鈕")

if __name__ == "__main__" :
    app = QApplication(sys.argv)
    win = CustWidget()
    win.show()
    sys.exit(app.exec_())

3.執行結果