什麼是訊號和槽
訊號(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。喜歡本文內容的就收藏,點贊,評論,關注和轉發。
最新評論