Python QtCore信号是否可以设置为当前等级?

Python QtCore信号是否可以设置为当前等级?,python,python-2.7,pyside,qt4.8,Python,Python 2.7,Pyside,Qt4.8,我试图使用QtCore.Signal向对象的父对象发送一个类的新实例。 我尝试做的如下操作,但失败于: name错误:未定义名称“myClass” 通过更改行: mySignal = QtCore.Signal(myClass) 到 似乎可以修复错误,但我不确定这样做是否正确,除非这可能不是我正在做的事情的最佳方式。典型的方法是将信号定义为 mySignal = QtCore.Signal(object) 因为您希望发出类的实例 编辑:如果希望解决循环依赖关系,可以将信号放在包装类中。例如

我试图使用
QtCore.Signal
向对象的父对象发送一个类的新实例。 我尝试做的如下操作,但失败于:

name错误:未定义名称“myClass”

通过更改行:

mySignal = QtCore.Signal(myClass)


似乎可以修复错误,但我不确定这样做是否正确,除非这可能不是我正在做的事情的最佳方式。

典型的方法是将信号定义为

mySignal = QtCore.Signal(object)
因为您希望发出类的实例

编辑:如果希望解决循环依赖关系,可以将信号放在包装类中。例如

class myClass(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(myClass, self).__init__(parent)
        # Note: argument of "self" is to parent the object
        self.signalwrapper = MyWrapper(self)

    def create_new_self(self):
        newSelf = myClass(self.parent())
        self.signalwrapper.mySignal.emit(newSelf)

class MyWrapper(QtCore.QObject):
    mySignal = QtCore.Signal(myClass)

使用更精确的打字有好处吗?例如,如果我通过一个信号传递和
int
,我也可以使用
object
,因为(几乎?)一切都是“一流的”@busfault如果你也使用
pyqtlot
定义你的插槽,那么在类型上更具体可能会让你捕捉错误。如果您跨线程发送信号,并且文档表明它可以提高内存效率,那么这也很好。@BrendanAbel我使用的是
PySide
,它没有
pyqtSlot
,只有
QtCore.Slot()
pyqtSlot能够捕获“类型”错误吗?我曾经遇到的一个问题是,我更改了
信号
定义,而不是相应的
插槽
,突然
插槽
不再获得
信号
@busfault,我不确定这方面的技术细节,但如果有问题,我在回答中提供了一个额外的解决方案,允许您正确指定类型。
mySignal = QtCore.Signal(object)
class myClass(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(myClass, self).__init__(parent)
        # Note: argument of "self" is to parent the object
        self.signalwrapper = MyWrapper(self)

    def create_new_self(self):
        newSelf = myClass(self.parent())
        self.signalwrapper.mySignal.emit(newSelf)

class MyWrapper(QtCore.QObject):
    mySignal = QtCore.Signal(myClass)