QWebEngineView: таймеры не работают, когда они видны

Я пытался реализовать код из этого вопроса, но Я обнаружил, что QTimer не срабатывает при определенных обстоятельствах.

Упрощенный код:

app = QApplication([])

view = QWebEngineView()
view.show()

def callback():
    sys.exit(0)

QTimer.singleShot(1000, callback)

app.exec()

Приложение работает вечно с этим кодом (т.е. callback никогда не выполняется). Однако, если вы закомментируете view.show(), он выйдет через одну секунду, как и должно быть.

Насколько я могу судить, эта проблема специфична для QWebEngineView; если мы заменим QWebEngineView общим QWidget или QLabel, то он будет работать как положено и завершится через одну секунду.

В чем причина этого и как я могу это исправить?


person Dragon    schedule 11.03.2020    source источник
comment
Как ни странно, я тестировал код на Python 3.8.1, PyQt5 5.14.1 на Linux, и он работает корректно.   -  person eyllanesc    schedule 11.03.2020
comment
Я использую Python 3.7.2, ту же версию pyqt и Windows 10.   -  person Dragon    schedule 11.03.2020
comment
Возможно, это ошибка, попробуйте другие версии pyqt5.   -  person eyllanesc    schedule 11.03.2020
comment
Где вы запускаете свой код: CMD, интерактивная консоль Python или какая-нибудь IDE?   -  person eyllanesc    schedule 11.03.2020
comment
Я пробовал PyCharm IDE и консоль; проблема есть в обоих.   -  person Dragon    schedule 11.03.2020
comment
ммм, я думаю, это ошибка, попробуйте более ранние версии pyqt5 и pyqtwebengine. Вы используете одну и ту же версию pyqt5 и pyqtwebengine?   -  person eyllanesc    schedule 11.03.2020
comment
Ты был прав! Похоже, это ошибка, появившаяся где-то после версии 5.12.1 pyqtwebengine. Напишите как ответ, и я приму это.   -  person Dragon    schedule 11.03.2020
comment
Лучше опубликуй. :-)   -  person eyllanesc    schedule 11.03.2020


Ответы (1)


По подсказке @eyllanesc я обнаружил, что это ошибка, появившаяся в выпуске 5.14.0 модуля PyQtWebEngine; предыдущая версия (5.13.2) не показывает такого поведения.

person Dragon    schedule 11.03.2020