【问题标题】:Understanding pyqtProperty in PyQt4理解 PyQt4 中的 pyqtProperty
【发布时间】:2011-03-07 17:01:34
【问题描述】:

我编写了以下小脚本来理解属性。我无法理解的一件事是,我的班级 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()

【问题讨论】:

    标签: python properties pyqt


    【解决方案1】:

    如果这不应该是您的对象类的属性,则它属于该类__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__的范围内,并不创建属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2011-07-10
      • 1970-01-01
      相关资源
      最近更新 更多