了解PyQt4中的pyqtProperty

我写了下面的小脚本来理解属性。 我无法理解的一件事是,我的类AmetaObject()现在包含名称为conf_name的属性。 它是如何得到这些信息的? 在我的课程中,它只被用作调用目标变量的名称来设置属性。 这怎么能被实现? 它是否也可以用普通的Python实现,即没有C API?

#!/usr/bin/python
from PyQt4.QtCore import QObject, pyqtProperty
from PyQt4.QtGui import QApplication

class A( QObject ):
    def __init__( self, parent = None ):
        QObject.__init__( self )
        self._name = ""

    def getName( self ):
        return self._name

    def setName( self, value ):
        self._name = value

    conf_name = pyqtProperty( "QString", getName, setName )

a = QApplication([])

ai = A()

for i in range( ai.metaObject().propertyCount() ):
    print ai.metaObject().property( i ).name()

如果这不是你的对象类的属性,它就属于那个类__init__函数。 你在那里有一个类属性,它将被该子类对象类型的所有对象继承。

这实际上可能非常有用。 例如:

for PyQt4.QtCore import QThread
class My_Thread(QThread):
  all_instances = []
  def __del__(self, *args, **kwargs):
    all_instances.remove(self)
    QThread.__del__(self, *args, **kwargs)
  def __init__(self, *args, **kwargs):
    QThread.__init__(self, *args, **kwargs)
    my_locally_scoped_variable = None
    self.all_instances.append(self)

这个类创建了一个QThread的子类,它匹配它的确切接口,除非我创建了thread = My_Thread(blahblahblah) ,我可以获得这个类型的所有其他线程的列表,以及通过查询thread.all_instances任何子类,或者甚至thread.all_instances[-1].all_instances 。 不管怎样处理对象删除,否则引用将永远存在于你的类的每个项目,因此永远不会被垃圾收集。

另请注意, my_locally_scoped_variable只存在于__init__范围内,并且不会创建属性。

链接地址: http://www.djcxy.com/p/64485.html

上一篇: Understanding pyqtProperty in PyQt4

下一篇: Hanged listSelector in ListView