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)