我已经看到了一些使用@ QtCore.Slot装饰器的PySide插槽的示例代码,而有些则没有。自己进行测试,似乎没有什么不同。我应该或不应该使用它吗?例如,在以下代码中:

import sys
from PySide import QtCore

# the next line seems to make no difference
@QtCore.Slot()
def a_slot(s):
    print s

class SomeClass(QtCore.QObject):
    happened = QtCore.Signal(str)
    def __init__(self):
        QtCore.QObject.__init__(self)
    def do_signal(self):
        self.happened.emit("Hi.")

sc = SomeClass()
sc.happened.connect(a_slot)
sc.do_signal()

@ QtCore.Slot装饰器没有区别;我可以忽略它,调用@ QtCore.Slot(str)或什至@ QtCore.Slot(int),它仍然很好地说“嗨”。

对于PyQt的pyqtSlot似乎也是如此。

最佳答案

This链接说明了有关pyqtSlot装饰器的以下内容:







由于pyqtSlot装饰器可以采用其他参数,例如name,因此它允许不同的Python方法处理信号的不同签名。

如果不使用插槽装饰器,则信号连接机制必须手动计算所有类型转换,以从基础C++函数签名映射到Python函数。使用插槽装饰器时,类型映射可以是显式的。

关于python - 需要PySide插槽装饰器吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14421897/

10-09 08:42