Задать вопрос
JRazor
@JRazor
Senior StarkOverFlow Programmer

Передача информации в основной поток PyQt4: как?

Здравствуйте, уважаемые коллеги. Возникла проблема: писал модуль, сделал GUI, написал Scrapy паука, но не могу передать информацию в основной поток GUI.

При разработке использовал модуль SimpleThread (habrahabr.ru/post/125699) и запрограммировал кнопку в другой поток (чтобы Гуй не зависал при работе). Но не могу передать информацию в QLabel.

Разумеецо, использовал СЛОТ-СИГНАЛ:

from PyQt4 import QtCore
 
@QtCore.pyqtSlot(object)
def saySomething(stuff):
    print stuff
 
class Communicate(QtCore.QObject):
    speak = QtCore.pyqtSignal(object)
 
someone = Communicate()
someone.speak.connect(saySomething)
someone.speak.emit("Test text!")


Сигнал отправляется (если просто прописать print text, то текст отобразится, но вот self.ui.output.setText(text) не работает. Может ли кто-нибудь сказать почему?

Как отправить сигнал с параметром в основной поток GUI?
  • Вопрос задан
  • 3184 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
hlamer
@hlamer
Вы спастили код, который работает, но не спастили тот код, который собственно не работает.

Попробуйте сначала сделать базовый кейс без simple_thread: Объект класса, унаследованного от QThread, сигнал шлет из метода run(). QLabel.setText сигнал получает. Это все происходит в запущенном приложении (после app.exec_())

В принципе сигналы-слоты между потоками в Qt отлично работают.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы