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

时间:2016-11-20 13:44:40

标签: qt pyqt5 qtwebengine

我发现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_())

UPDATE2: 我为此创建了一张票,因为在我看来这是一个错误。 https://bugreports.qt.io/browse/QTBUG-57228但是,在修复发布之前,任何解决方法都将非常受欢迎。

1 个答案:

答案 0 :(得分:1)

似乎我需要在del widgetdel app之间添加result = app.exec_()sys.exit(result)。然后它按预期工作。可能不是QtWebEngine中的问题,而是PyQt5中未正确发布所有引用的问题。

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

的评论