Можно ли запросить PyQt4 QObject, чтобы определить, был ли уничтожен базовый экземпляр C ++? - PullRequest
7 голосов
/ 25 февраля 2011

Сигнал destroy () может быть перехвачен для объекта QObject, но я хотел бы просто проверить, ссылается ли объект Python на действительный объект C ++ Qt.Есть ли способ сделать это напрямую?

Ответы [ 2 ]

15 голосов
/ 01 марта 2011

Если вы импортируете модуль sip, вы можете вызвать его функцию .isdeleted.

import sip
from PyQt4.QtCore import QObject

q = QObject()
sip.isdeleted(q)
False

sip.delete(q)
q
<PyQt4.QtCore.QObject object at 0x017CCA98>

q.isdeleted(q)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: underlying C/C++ object has been deleted
2 голосов
/ 26 февраля 2011

Вы можете использовать класс WeakRef в стандартной библиотеке Python. Это будет выглядеть примерно так:

import weakref

q = QObject()
w = weakref.ref(q)

if w() is not None: # Remember the parentheses!
    print('The QObject is still alive.')
else:
    print('Looks like the QObject died.')
...