PySide: 'PySide.QtCore.Signal'对象没有'emit'属性。

7

使用以下代码,当尝试发出信号时,我会收到一个错误提示('PySide.QtCore.Signal' object has no attribute 'emit'):

#!/usr/bin/env python

from PySide import QtCore

class TestSignalClass(QtCore.QObject):
    somesignal = QtCore.Signal()

    def speak_me(self):
        self.speak.emit()
    def __init__(self):
        try:
            self.somesignal.emit()
        except Exception as e:
            print("__init__:")
            print(e)

t = TestSignalClass()

我该怎么做才能解决这个问题?

2个回答

13
问题在于尽管该类正确地继承了 QtCore.QObject,但它没有调用父类的构造函数。以下版本可以正常工作:
#!/usr/bin/env python

from PySide import QtCore

class TestSignalClass(QtCore.QObject):
    somesignal = QtCore.Signal()

    def speak_me(self):
        self.speak.emit()
    def __init__(self):
        # Don't forget super(...)!
        super(TestSignalClass, self).__init__()
        try:
            self.somesignal.emit()
        except Exception as e:
            print("__init__:")
            print(e)

t = TestSignalClass()

在查看了很多堆栈溢出的答案后,这就是解决我的方法。谢谢! - David Murray

1
上面的解决方案对我来说有些“奇怪”...因此我在下面提供我的解决方案...
from PySide2.QtCore import Signal, QObject

class myTestObject(QObject):
    someSignal = Signal(str)

    def __init__(self):
        QObject.__init__(self)  # call to initialize properly
        self.someSignal.connect(self.testSignal)  # test connect
        self.someSignal.emit("Wowz")  # test

    def testSignal(self, arg):
        print("my signal test from init fire", arg)

为什么您要显式地使用父类的名称(QObject),而不是使用 super,另一个答案有什么奇怪之处?您可能想阅读 https://dev59.com/gHVC5IYBdhLWcg3wpi98。 - quazgar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接