мде.. пока писал вопрос, пришла мысль и нашёлся ответ..
пример:
from PyQt4 import QtGui, QtCore
#########################################################
class MainWidget(QtGui.QWidget):
trigger = QtCore.pyqtSignal()
def __init__(self, parent = None, *args, **kwargs):
QtGui.QWidget.__init__(self, parent)
# self.trigger = QtCore.pyqtSignal()
def test_handle(self):
print 'WOW!!!!!!!!!!'
def test(self):
self.trigger.connect(self.test_handle, QtCore.Qt.QueuedConnection)
self.trigger.emit()
если pyqtSignal() объявить в __init__, то будет ошибка (закомменченая строчка)..
AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'
pydoc тоже говорит, что connect-а у pyqtSignal нет..
print показал, что pyqtSignal в QtGui.QWidget.__init__(self, parent) превращается в pyqtBoundSignal.. pyqtSignal bound-ят к какому то QObject..
я не понял только одного: почему, если сделать self.trigger = QtCore.pyqtSignal() перед QtGui.QWidget.__init__(self, parent), то ошибка всё равно будет?.
в чём разница между мембером, объявленным в теле класса, и мембером, объявленным в теле конструктора?.