PyQt - 訊號與槽的支援



PyQt 使用訊號和槽在物件之間進行通訊。使用 PyQt 的此功能可以增強 PyQt 應用程式的響應能力,並促進程式碼的模組化和可重用性。本章我們將瞭解訊號和槽的概念。

理解訊號和槽

訊號和槽的概念是訊號和槽的核心概念之一。訊號表示應用程式中發生的事件,而槽是可以在響應這些事件時執行的 Python 函式或方法。這種機制使應用程式的不同元件之間能夠解耦通訊,從而實現更模組化和易於維護的程式碼庫。

訊號和槽的關鍵特性

  • 連線的靈活性 − 訊號可以連線到多個槽,使單個事件能夠觸發應用程式中的各種操作。此外,訊號還可以連線到其他訊號,這有助於不同系統部分之間的互動。
  • 多種引數 − PyQt 中的訊號支援多種 Python 型別作為引數,從而在元件之間靈活地傳輸資料。
  • 多個連線 − 一個槽可以連線到多個訊號,允許集中處理相關的事件。
  • 同步和非同步連線 − 訊號和槽之間的連線可以是直接的(同步)或排隊的(非同步),從而提供管理應用程式中執行流程的選項。
  • 執行緒安全 − PyQt 支援跨執行緒連線,方便在並行執行緒中執行的元件之間的通訊,而不會影響穩定性或效能。
  • 動態連線 − 訊號可以在執行時斷開連線,從而提供對應用程式內通訊流的動態控制。

示例 1:簡單的訊號和槽連線

在下面的示例中,我們建立一個帶有按鈕的 PyQt 應用程式。單擊按鈕時,將呼叫 greet 函式,演示了基本的訊號槽連線。

import sys
from PyQt5.QtWidgets import QApplication, QPushButton

def greet():
   print("Hello, PyQt!")

app = QApplication(sys.argv)
button = QPushButton("Click Me")
button.clicked.connect(greet)
button.show()
sys.exit(app.exec_())

輸出

Hello, PyQt!

示例 2:將多個槽連線到一個訊號

在下面的示例中,我們將兩個不同的槽 (greet 和 farewell) 連線到按鈕的 clicked 訊號。單擊按鈕時,這兩個函式都將被呼叫,這展示了將多個槽連線到單個訊號的能力。

import sys
from PyQt5.QtWidgets import QApplication, QPushButton

def greet():
   print("Hello, PyQt!")

def farewell():
   print("Goodbye, PyQt!")

app = QApplication(sys.argv)
button = QPushButton("Click Me")
button.clicked.connect(greet)
button.clicked.connect(farewell)
button.show()
sys.exit(app.exec_())

輸出

Hello, PyQt!
Goodbye, PyQt!

PyQt 的支援和訊號機制在構建強大和模組化的應用程式中起著關鍵作用。透過使用訊號和槽,開發人員可以建立靈活、響應迅速且易於維護的軟體解決方案。憑藉其多樣化的功能和實際示例,PyQt 使開發人員能夠發揮創造力,並在各個領域構建創新的應用程式。

廣告
© . All rights reserved.