Проверьте этот вопрос, который я задал некоторое время назад. Существует пример кода, который может помочь вам понять, что вам нужно делать.
То, что вы сказали о регистрации вашего сигнала, заставляет меня подумать об этом коде (из вышеупомянутого вопроса):
class ProcessingThread(threading.Thread, QtCore.QObject):
__pyqtSignals__ = ( "progressUpdated(str)",
"resultsReady(str)")
Я передаю строки в моем примере, но вы должны заменить str
на list
.
Если окажется, что вы не можете передать изменяемые объекты, вы можете обработать свои результаты так, как я делаю в моем примере (т.е. установить переменную results
в потоке, сообщить основному потоку, что они готовы, и есть основная тема "забрать их").
Обновление:
Вы получаете сообщение QObject::connect: Cannot queue arguments of type 'statuses'
, потому что вам нужно определить тип аргумента, который вы передадите, когда будете излучать свой сигнал. Тип, который вы хотите передать - list
, а не statuses
.
Когда вы подключаете свой сигнал, он должен выглядеть так:
QtCore.QObject.connect(self.twit_in,
QtCore.SIGNAL("newStatuses(list)"),
self.update_tweet_list)
Когда вы излучаете сигнал, он должен выглядеть следующим образом:
self.emit(SIGNAL("newStatuses(list)"), statuses)
, учитывая, что statuses
является списком. Обратите внимание, что вы можете создать копию вашего списка в зависимости от вашей ситуации.
Обновление 2:
Хорошо, использование list
в качестве неверного типа. Из справки PyQt4:
Сигналы PyQt и сигналы Qt
Сигналы Qt статически определены как
часть класса C ++. Они есть
ссылается с помощью
QtCore.SIGNAL()
функция. это
метод принимает один строковый аргумент
это название сигнала и его
С ++ подпись. Например ::
QtCore.SIGNAL("finished(int)")
возвращаемое значение обычно передается
к QtCore.QObject.connect()
Метод.
PyQt позволяет определять новые сигналы
динамически. Акт испускания
Сигнал PyQt неявно определяет его.
На сигналы PyQt v4 также ссылаются
используя QtCore.SIGNAL()
функция.
Тип аргумента PyQt_PyObject
Можно пропустить любой Питон
объект в качестве аргумента сигнала
указав PyQt_PyObject
в качестве
Тип аргумента в подписи.
Например ::
QtCore.SIGNAL("finished(PyQt_PyObject)")
Хотя обычно это используется для
прохождение объектов, таких как списки и
словари в качестве аргументов, это
может быть использован для любого типа Python. это
преимущество при прохождении, например,
целое число является нормальным
преобразования из объекта Python в
C ++ целое число и обратно не являются
требуется.
Количество ссылок объекта
проходя поддерживается
автоматически. Там нет необходимости
излучатель сигнала, чтобы сохранить
ссылка на объект после вызова
до QtCore.QObject.emit()
, даже если
соединение ставится в очередь.