QWebEngineView 在某些情况下无法正常关闭

QWebEngineView not closing properly in some cases

我发现 QWebEngineView 的行为很奇怪(Windows PyQt5 和 Qt 5.7.0)并且在某些情况下没有正确完成而使应用程序挂起。以下代码段工作正常。但是,如果您取消注释标有 #1#2 的两行,然后尝试关闭应用程序,应用程序就会挂起。如果您仅取消注释 #3,也会发生同样的情况。我用 QWebEngineView 以外的其他小部件进行了尝试,没有出现任何问题。

import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
app = QtWidgets.QApplication(sys.argv)
mainWindow = QtWidgets.QMainWindow()
widget = QtWebEngineWidgets.QWebEngineView()
# widget.load(QtCore.QUrl("http:/www.google.com"))  #1
mainWindow.setCentralWidget(widget)
# mainWindow.setCentralWidget(None)                 #2
# widget.deleteLater()                              #3
mainWindow.show()
result = app.exec_()
sys.exit(result)

这是可以重现错误的最短代码。但是我在更大的应用程序中需要的是将 Web 引擎视图设置为中央小部件,然后使用菜单操作关闭它并将另一个小部件设置为中央小部件。任何想法如何修复行为并实现预期的行为?还是我做错了什么?

更新:

我发现了更简单的示例来展示所描述的问题。 运行 在 Windows 上,PyQt 5.7 使应用程序挂起。

import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
app = QtWidgets.QApplication(sys.argv)
widget = QtWebEngineWidgets.QWebEngineView()
widget.setAttribute(QtCore.Qt.WA_DeleteOnClose)
widget.show()
sys.exit(app.exec_())

更新 2: 我为此创建了一张票,因为在我看来这是一个错误。 https://bugreports.qt.io/browse/QTBUG-57228 然而,在交付修复程序之前,我们将不胜感激任何解决方法。

看来我需要在 result = app.exec_()sys.exit(result) 之间添加 del widgetdel app。然后它按预期工作。在 QtWebEngine 中可能不是问题,但在 PyQt5 中可能没有正确释放所有引用。

查看 https://bugreports.qt.io/browse/QTBUG-57228

的评论