QObject, pyqtSignal в PyQt5 - PullRequest
       5

QObject, pyqtSignal в PyQt5

0 голосов
/ 06 мая 2018

См. Код:

from PyQt5.QtCore import QObject, pyqtSignal

class QtSignal(QObject):

    signal = pyqtSignal()

# Case 1:
signal = pyqtSignal()
print(type(signal))

# Case 2:
qtSignal = QtSignal()
print(type(qtSignal.signal))

Для case 1 выводит <class 'PyQt5.QtCore.pyqtSignal'>, а для case 2 выводит <class 'PyQt5.QtCore.pyqtBoundSignal'>.

Разница между двумя случаями заключается в том, следует ли определять qtSignal в подклассе QObject. Но почему pyqtSignal станет pyqtBoundSignal, если оно определено в подклассе QObject?

1 Ответ

0 голосов
/ 06 мая 2018

pyqtSignal следует так называемому протоколу дескриптора. Это наиболее широко используется в декораторе свойств, но вы найдете множество других применений.

В результате этого доступ к атрибуту позволяет ему получить ссылку на объект, через который вы вызываете его. Так что в вашем случае экземпляр QtSignal. Результатом является связанный сигнал. Это то же самое кстати для методов классов!

Это необходимо, потому что когда вы излучаете сигнал, вам нужен отправитель. И так PyQT узнает, кто это.

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