Понимание pyqtProperty в PyQt4 - PullRequest
1 голос
/ 07 марта 2011

Я написал следующий маленький скрипт для понимания свойств. Одна вещь, которую я не могу понять, это то, что metaObject() моего класса A теперь содержит свойство с именем 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()

1 Ответ

0 голосов
/ 11 марта 2011

, если предполагается, что это не свойство вашего класса объектов, оно относится к функции __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__ и делаетне создавать собственность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...