gpt4 book ai didi

python - 可以将 QtCore 信号设置为当前类吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:23 25 4
gpt4 key购买 nike

我正在尝试使用 QtCore.Signal 将类的新实例发送到对象的父级。我正在尝试做的事情如下,但失败了:

NameError: name 'myClass' is not defined

class myClass(QtGui.QMainWindow):
mySignal = QtCore.Signal(myClass)
def __init__(self, parent=None):
super(myClass, self).__init__(parent)

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

class myParentClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(myParentClass, self).__init__(parent)
myNewClass = myClass(self)
myNewClass.mySignal.connect(self.handle_my_signal)

@QtCore.Slot(myClass)
def handle_my_signal(self, newMyClass):
newMyClass.mySignal.connect(self.handle_my_signal)
self.listOfClasses.append(newMyClass)

通过改变行:

mySignal = QtCore.Signal(myClass)

mySignal = QtCore.Signal(QtGui.QMainWindow)

似乎修复了错误,但我不确定这是否是执行此类操作的正确方法,除了它可能不是执行我正在做的事情的最佳方法。

最佳答案

执行此操作的典型方法是将信号定义为

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)

关于python - 可以将 QtCore 信号设置为当前类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37603339/

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