У меня есть проблемы с пользовательским сигналом в классе, который я сделал.
Соответствующие нормы:
self.parse_triggered = QtCore.pyqtSignal()
def parseFile(self):
self.emit(self.parse_triggered)
Оба из тех принадлежат классу: RefreshWidget. В его родительском классе я имею:
self.refreshWidget.parse_triggered.connect(self.tabWidget.giveTabsData())
Когда я пытаюсь запустить программу, я получаю ошибку:
AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'
Помощь? Заранее спасибо.
У меня была та же самая проблема, что и у вас.
Попробуйте переместить
self.parse_triggered = QtCore.pyqtSignal()
из конструктора, но внутрь объявления класса. Поэтому вместо того, чтобы это выглядело так:
class Worker(QtCore.QThread):
def __init__(self, parent = None):
super(Worker, self).__init__(parent)
self.parse_triggered = QtCore.pyqtSignal()
Это должно выглядеть так:
class Worker(QtCore.QThread):
parse_triggered = QtCore.pyqtSignal()
def __init__(self, parent = None):
super(Worker, self).__init__(parent)
Возможно, это совсем не то, что вы ищете, но это сработало для меня. Я все равно переключился на сигналы старого стиля, потому что я не нашел способа в сигналах нового стиля иметь неопределенное количество или тип параметров.
Почему вы подключаетесь напрямую к сигналу, а можете
self.connect (виджет, СИГНАЛ ('parse_triggered ()'), слушатель.listen_method)
?
где self - это, например, сама форма и может быть тем же, что и listener