Python 尝试使用类时出现问题';其中有一个名字';s自己的类变量部分
我现在正在用Python和PyQt编写一个应用程序,我遇到了一点问题。这个问题不需要了解PyQt本身,只需要了解python中的静态变量。我正在向一个类添加一些信号,当信号被触发时,该类将发出该类的实例 我拥有的是这样的东西:Python 尝试使用类时出现问题';其中有一个名字';s自己的类变量部分,python,class,pyqt,class-variables,Python,Class,Pyqt,Class Variables,我现在正在用Python和PyQt编写一个应用程序,我遇到了一点问题。这个问题不需要了解PyQt本身,只需要了解python中的静态变量。我正在向一个类添加一些信号,当信号被触发时,该类将发出该类的实例 我拥有的是这样的东西: class Foo(QObject): # ... # Signals updated = pyqtSignal(Foo) moved = pyqtSignal(Foo) # ... Python给了我一个错误: NameErro
class Foo(QObject):
# ...
# Signals
updated = pyqtSignal(Foo)
moved = pyqtSignal(Foo)
# ...
Python给了我一个错误:
NameError: name 'Foo' is not defined
IIRC,这与类
Foo
绑定到globals时有关。我也不能在这里使用self
。请提供有关如何解决此问题的任何帮助。听起来像是信号传递自己的类变量。从这个参考。可能需要使用QObject
。(不是Foo
,但子类是相同的)
或者,如果你想传递任何对象,我想你可以使用对象
class Foo(QObject):
updated = pyqtSignal(object)
moved = pyqtSignal(object)
您可以指定应该在pyqt connect信号中发出它的类。问题是,在构造Foo
时,对updated=pyqtSignal(Foo)
语句进行求值,因此在求值该语句时,Foo
不存在。。在一般情况下,您必须将其移到类定义之外,尽管可能存在一些pyqt魔力(例如,使用QObject
而不是另一个答案中描述的Foo
):
我将全力支持这个答案。我以前使用过pyqtSignal(object)
通过信号传递对象。我还没有明确地将引用传递给类的一个实例,该类的信号是定义它(如您所希望的),但我不明白为什么它会与我以前所做的有任何不同。我曾想过使用QObject
,但我决定不使用它。我想试一试,但是在类定义之后分配类变量不是很糟糕吗?不幸的是,这不起作用,因为信号需要在类结构中定义,而不是在类结构之外。谢谢你。
class Foo(...):
...
Foo.updated = pyqtSignal(Foo)