gpt4 book ai didi

python - 为什么我需要用pyqtSlot装饰连接的插槽?

转载 作者:太空狗 更新时间:2023-10-29 20:49:06 24 4
gpt4 key购买 nike

我使用的是 pyqt5,我有几个方法使用类似于以下的代码连接:

self.progress.canceled.connect(self.cancel)

例如,self.cancel 是:

def cancel(self):
self.timer.stop()

此代码似乎在多种情况下都能正常工作,无需使用 pyqtSlot 修饰 cancel 或对其进行任何特殊操作。

我的问题是:

  1. 这样做我会失去什么?
  2. 需要 pyqtSlot 的原因是什么?

最佳答案

pyqtSlot的主要目的|是允许定义多个不同的插槽重载,每个重载都有不同的签名。有时在进行跨线程连接时也可能需要它(参见 this answer 了解其中一种情况)。然而,这些用例相对较少,在大多数 PyQt 应用程序中根本没有必要使用 pyqtSlot。信号可以连接到任何 python 可调用对象,无论它是否装饰为插槽。

PyQt 文档还声明:

Connecting a signal to a decorated Python method also has the advantage of reducing the amount of memory used and is slightly faster.

然而,在实践中,这种优势通常很小,而且往往会被其他因素淹没。它对原始信号速度的影响很小,并且在它开始对 cpu 负载或内存使用产生重大影响之前,有必要进行 数千 的发射/连接。有关这些要点的深入分析,请参阅@Schollii 撰写的这篇代码项目文章:

关于python - 为什么我需要用pyqtSlot装饰连接的插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40325953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com