尝试在其自己的类变量部分中使用类的名称

时间:2014-08-25 03:04:15

标签: python class pyqt class-variables

我现在正在使用Python和PyQt编写应用程序,而且我有一些问题。这个问题并不需要了解PyQt本身,只需要了解python中的静态变量。我想把一些信号添加到一个类中,当信号被触发时它会发出类的实例。

我所拥有的是这样的:

class Foo(QObject):
    # ...
    # Signals
    updated = pyqtSignal(Foo)
    moved = pyqtSignal(Foo)
    # ...

Python给了我错误:

NameError: name 'Foo' is not defined
IIRC,当类Foo绑定到全局变量时,这必须做一些事情。我也不能在这里使用self。如何解决这个问题的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

声音就像这个信号传递自己的类变量。从参考文献pyqt signal开始。它可能使用QObject。 (不是Foo,但是子类是相同的)

或者,如果您想传递任何对象,我认为您可以使用object;

class Foo(QObject):
    updated = pyqtSignal(object)
    moved = pyqtSignal(object)

你可以指定哪个类应该在pyqt connect signal中发出它。

答案 1 :(得分:1)

问题是语句updated = pyqtSignal(Foo)在构建Foo时评估 ,因此在评估该语句时Foo不存在..在一般情况下,你必须将它移到类定义之外,尽管可能有一些pyqt魔法(例如使用QObject而不是Foo,如另一个答案中所述) :

class Foo(...):
   ...

Foo.updated = pyqtSignal(Foo)