我正在使用 pyqt5,并且使用类似于以下的代码连接了几种方法:
self.progress.canceled.connect(self.cancel)
例如,其中self.cancel
is:
def cancel(self):
self.timer.stop()
这段代码似乎可以在多种场景下正常工作,无需任何装饰cancel
with pyqtSlot
或者用它做一些特别的事情。
我的问题是:
- 这样做我会失去什么?
- 是什么原因
pyqtSlot
是必须的?
主要目的pyqtSlot http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html#the-pyqtslot-decorator是允许定义一个槽的多个不同的重载,每个重载都有不同的签名。有时在进行跨线程连接时也可能需要它(请参见这个答案 https://stackoverflow.com/a/20818401/984421对于一种这样的场景)。然而,这些用例相对较少,并且在大多数 PyQt 应用程序中没有必要使用pyqtSlot
根本不。信号可以连接到任何Python可调用对象,无论它是否被装饰为槽。
PyQt 文档还指出:
将信号连接到修饰的 Python 方法还具有减少内存使用量的优点,并且速度稍快一些。
然而,在实践中,这种优势通常非常小,并且常常会被其他因素所淹没。它对原始信号速度的影响很小,因此有必要使数千在开始对 cpu 负载或内存使用产生重大影响之前发出/连接的数量。有关这些要点的深入分析,请参阅 @Schollii 撰写的代码项目文章:
- PyQt5信号/槽连接性能 http://www.codeproject.com/Articles/1123088/PyQt-signal-slot-connection-performance
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)