PyQt - 连接、断开和发射信号



将信号连接到槽

在 PyQt 中,使用绑定信号的 **connect()** 函数将信号连接到槽。当信号成功连接到槽时,connect() 方法返回一个 **Connection** 对象。它也可以稍后断开连接。如果连接建立失败,将引发异常。

连接信号的语法和参数

连接信号传递的语法和参数如下所示:

connect(slot[, type=PyQt5.QtCore.Qt.AutoConnection[, no_receiver_check=False]]) → PyQt5.QtCore.QMetaObject.Connection

传递的参数具有不同的用途,如下所示:

  • **slot** - 它指定要连接信号的槽。它可以是 Python 可调用对象或另一个绑定信号。
  • **type** - 要建立的连接的类型。默认情况下,它设置为 AutoConnection,这意味着 PyQt 将确定最合适的连接类型。
  • **no_receiver_check** - 这是一个可选参数,用于抑制对底层 C++ 接收器实例是否仍然存在的检查,并无论如何传递信号。

连接信号的示例

在此示例中,定义了一个名为 **Foo** 的类,该类具有一个信号 **trigger**。然后使用方法 **connect_and_emit_trigger()** 将触发信号连接到槽 **handle_trigger**。

from PyQt6.QtCore import QObject, pyqtSignal class Foo(QObject): trigger = pyqtSignal() def connect_and_emit_trigger(self): self.trigger.connect(self.handle_trigger) self.trigger.emit() def handle_trigger(self): print("Trigger signal received") foo = Foo() foo.connect_and_emit_trigger()

输出

Trigger signal received

从槽断开信号

可以使用绑定信号的 **disconnect()** 方法从槽断开信号。如果槽未连接到信号或信号根本没有连接,则会引发异常。

断开信号的语法和参数

disconnect([slot])

这里,**slot** 是一个可选参数,它指定要断开的槽。如果未传递,则断开连接到信号的所有槽。

断开信号的示例

在此示例中,我们定义了一个名为 Bar 的类,该类具有一个信号 trigger 和一个方法 connect_and_disconnect_trigger(),用于将信号连接到槽 handle_trigger()。当调用 connect_and_disconnect_trigger() 时,它将 trigger 信号连接到 **handle_trigger()** 槽,发出信号,打印 **“Trigger signal received”**,然后断开槽的连接。

from PyQt6.QtCore import QObject, pyqtSignal class Bar(QObject): trigger = pyqtSignal() def connect_and_disconnect_trigger(self): self.trigger.connect(self.handle_trigger) self.trigger.emit() self.trigger.disconnect(self.handle_trigger) def handle_trigger(self): print("Trigger signal received") bar = Bar() bar.connect_and_disconnect_trigger()

输出

Trigger signal received

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

发射信号

使用绑定信号的 **emit()** 方法发射信号。

发射信号的语法和参数

emit(*args)

这里,**args** 是一个可选参数序列,用于传递给任何连接的槽。

发射信号的示例

在此示例中,定义了一个名为 **Baz** 的类,该类包含一个信号 **trigger**。然后我们将 **trigger** 信号连接到槽 **handle_trigger()** 并以值 **42** 发出信号。当连接的槽接收到此值时,它会打印 **Trigger signal received with value: 42** 作为输出。

from PyQt5.QtCore import QObject, pyqtSignal class Baz(QObject): trigger = pyqtSignal(int) def emit_trigger(self): self.trigger.emit(42) def handle_trigger(self, value): print("Trigger signal received with value:", value) baz = Baz() baz.trigger.connect(baz.handle_trigger) baz.emit_trigger()

输出

Trigger signal received with value: 42
广告