@TemaKam

Как в потоке ожидать завершение функции, вызванной сигналом, и получить значение из этой функции?

в потоке испускаю сигнал
self.signal_deer_2fa.emit()
tfa_code = ... (из функции сигнала как-то)

потом в этом потоке нужно продолжать работу уже с этой переменной tfa_code

функция, которая вызывается при испускании сигнала:
def signal_deer_2fa_f(self):
        tfa = QtWidgets.QInputDialog.getText(self, 'Ввод 2фа.', 'Введите 2фа код:')
        return tfa # или без него

вот как мне в потоке ожидать, пока пользователь не сделает что-то с диалоговым окном, и потом получить то, что он ввел?
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 1
@bbkmzzzz
сигнал испускается в потоке
вызывается функция, привязанная к этому сигналу
мне нужно в потоке дождаться, пока эта функция выполнится и получить значение из нее

Как только сигнал испущен, он попадает в очередь сигналов, и будет обработан как только, так сразу.
QThread - обертка над потоками, которая выполняется в QApplication, так что связывать слотом ее бессмысленно.

Все очень сильно зависит от структуры программы

Есть несколько путей. Из простых:
1. moveToThread(targetThread)
Создаем поток QThread, пустой, запускаем его. Берем класс и вызываем метод moveToThread, все слоты
этого класса будут выполняться в потоке
2. Очереди
Создаем очередь (например, queue.Queue), поток непрерывно слушает очередь, при возникновении там задачи, забирает ее и выполняет.
Задача - что угодно, главное, что-бы код знал, что с этим делать
Ответ написан
Ваш ответ на вопрос

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

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