SIGNAL Emit работает только в одной функции, но не в других? - PullRequest
1 голос
/ 27 октября 2011

У меня несколько странная проблема.Я кодирую многопоточное приложение и использую SIGNALS для передачи данных QThread в данные класса GUI.Без лишних слов, вот упрощенный код.

class GUI(uiMainWindow.MainWindow):
    def __init__(self, parent=None):
        super etc
        self.thread = Thread()
        self.connect(self.thread, SIGNAL("changeStatus(QString)"), self.setStatus, Qt.QueuedConnection)

    def setStatus(self, status):
        self.statusBar.setText(status)


class Thread(QThread):
    def __init__(self, parent=None, create=True):
        super etc
        self.create = create

    def run(self):
        if self.create:
            create_data()
        if not self.create:
            upload_data()

    def create_data(self):
        self.emit(SIGNAL("changeStatus(QString)"), "Changing the statusbar text")
        #rest of the code

    def upload_data(self):
        self.emit(SIGNAL("changeStatus(QString)"), "Changing the statusbar text")

Довольно просто, верно?Однако вот в чем проблема: self.emit работает только в функции create_data, но не в upload_data (или, в этом отношении, в любой другой функции; я также пытался поместить ее в __init__).Я попытался поместить print "I got the status" + status в функцию setStatus.Опять же, это работает в функции create_data (), но не в функции upload_data ().

Различия между этими двумя функциями относительно незначительны, и, насколько я могу судить, ничто не мешает функции self.emit - фактически, в обоих случаях self.emit составляет всего 4-5 строк"подальше" от определения функции.

Это действительно озадачивает меня.Любая помощь?Заранее спасибо!

РЕДАКТИРОВАТЬ: опять же, насколько я могу судить, единственное различие между двумя функциями заключается в run () - первая вызывается, если для параметра create установлено значение True, а вторая -если это неверно

1 Ответ

1 голос
/ 28 октября 2011

Я был прав в своем посте. Разница между Thread () и Thread (create = False) имела решающее значение. Мне пришлось определить новый метод (один был self.thread = Thread(), а другой self.diff_thread = Thread(create=False)) и подключиться к различным слотам, чтобы он работал.

...