首頁>技術>

什麼是訊號和槽

訊號(Signal)和槽(Slot)是Qt中的核心機制,也是在PyQt程式設計中物件之間進行通訊的機制。在QT中,每個繼承自QObject的物件都可以使用訊號和槽機制來進行通訊。 訊號和槽函式通過object.signal.connect()方法來連線。當一個QObject物件發射訊號,與之相連線的槽函式將會自動執行。

假設我們將每個繼承自QObject的物件想象成現實系統中可以完成一種或多種功能的部件,訊號相當於發射,槽相當於接收。當某個部件完成某個功能後,可以傳送一個訊號,表示我已經完成了某項工作(同時可以傳遞一些結果資料, 非必須),這時候,那些和該訊號連線的部件,相當於接收到該訊號,對應的槽函式完成相應的工作。

訊號和槽機制是型別安全的(type-safe):一個訊號的引數必須和接收槽的引數匹配,(槽的引數可以比它接收的訊號的引數短)。訊號與槽是鬆耦合(loosely coupled)的:一個發出訊號的類既不知道也不關心哪一個槽接收到這個訊號。Qt的訊號和槽機制保證了如果你將一個訊號連線到一個槽上,槽會在正確的時間以訊號的引數被呼叫。訊號與槽可以攜帶任意個、任意型別的引數。

PyQt的物件都包含各自的內建訊號,也可以新增自定義訊號,訊號與槽的特點大致如下:

訊號和槽的使用方法演示

在PyQt中,當object發出訊號時,使用訊號(signal)直接連線槽函式(slot_function), 連線方式如下:

object.signal.connect(slot_function);

下面的程式碼使用一個按鈕,演示了訊號和槽的連線方式:

import sysfrom PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox class testWindow(QMainWindow):    def __init__(self, parent=None):        super(testWindow, self).__init__(parent)                button = QPushButton("按鈕", self)        button.move(100, 100)        button.clicked.connect(self.buttonClicked)                self.setGeometry(100, 100, 320, 240)        self.setWindowTitle("Test Signal Slot connect")        def buttonClicked(self):        QMessageBox.information(self, "提示資訊", "訊號和槽測試:點選了按鈕")         if __name__ == '__main__':    app = QApplication(sys.argv)    wnd = testWindow()    wnd.show()    sys.exit(app.exec())

執行上述程式碼,結果如下圖所示

本文知識點什麼是訊號和槽;訊號和槽的連線方式;使用QWidget物件QPushButton。

喜歡本文內容的就收藏,點贊,評論,關注和轉發。

159

Qt

Python

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python實用案例程式設計入門:第十七章 利用Python建立個人網站