pyqt5 QPushButton setStyleSheet не обновляет GUI внутри функции connect [duplicate]

Краткий ответ: ваш метод foo() возвращается немедленно, а вызов $ajax() выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.

В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo() и сохранить результаты в члене этого объекта после завершения асинхронного вызова.

function foo(result) {
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;   // Store the async result
        }
    });
}

var result = { response: null };   // Object to hold the async result
foo(result);                       // Returns before the async completes

Обратите внимание, что вызов foo() ] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response.

1
задан user3755771 14 July 2014 в 15:01
поделиться

2 ответа

Вы должны вызывать QtCore.QCoreApplication.processEvents() в вашем цикле for, чтобы циклы событий Qt выполняли входящее событие (с клавиатуры или мыши).

4
ответ дан Antoine 28 August 2018 в 20:03
поделиться

Хотя вызов QtCore.QCoreApplication.processEvents() работает сейчас, я читал во многих местах в Интернете, что это должно быть последнее средство. К сожалению, ни один из источников не объясняет, почему, но см., Например,

Так что это кажется допустимым, но в целом лучше использовать QTimer или QThread.

4
ответ дан Community 28 August 2018 в 20:03
поделиться
Другие вопросы по тегам:

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