Я занимаюсь PyQt и (Q) потоками, создавая простой клиент Twitter. У меня два Qthreads.
-
Основной/графический поток.
-
Twitter fetch thread - извлекает данные из Twitter каждые X минут.
Итак, каждые X минут мой поток Twitter загружает новый набор обновлений статуса (список Python). Я хочу передать этот список в поток Main/GUI, чтобы он мог обновлять окно с этими статусами.
Я предполагаю, что я должен использовать систему сигналов/слотов для передачи списка "статусов" Python из нити Twitter, в поток Main/GUI. Итак, мой вопрос двоякий:
-
Как отправить статусы из потока Twitter?
-
Как мне получить их в потоке Main/GUI?
Насколько я могу судить, PyQt по умолчанию может отправлять PyQt-объекты через сигналы/слоты. Я думаю, что я должен каким-то образом зарегистрировать пользовательский сигнал, который я могу отправить, но документация по этому, что я нашел, очень неясна для новичка, подобного мне. У меня есть книга PyQt по заказу, но она не прибудет в другую неделю, и я не хочу ждать до тех пор.: -)
Я использую PyQt 4.6-1 на Ubuntu
Update:
Это выдержка из кода, который не работает. Во-первых, я пытаюсь "подключить" сигнал ( "newStatuses", имя, которое я только что составил) к функции self.update_tweet_list в потоке Main/GUI:
QtCore.QObject.connect(self.twit_in,
QtCore.SIGNAL("newStatuses (statuses)"),
self.update_tweet_list)
Затем в нитке Twitter я делаю это:
self.emit(SIGNAL("newStatuses (statuses)"), statuses)
Когда эта строка вызывается, я получаю следующее сообщение:
QObject::connect: Cannot queue arguments of type 'statuses'
(Make sure 'statuses' is registered using qRegisterMetaType().)
Я выполнил поиск qRegisterMetaType(), но я не нашел ничего, что могло бы понять Python.