【发布时间】:2019-07-07 06:06:24
【问题描述】:
我有一个带有 QWebEngineUrlRequestInterceptor 的 PyQt5 QWebEnginePage。运行app.exec_()后,Interceptor按预期工作,但是页面加载完成后,即回调
在执行self.loadFinished.connect(self._on_load_finished),并运行self.app.quit(),再次调用QWebEngineUrlRequestInterceptor.interceptRequest()函数,导致错误Received signal 11 <unknown> 000000000000
和脚本崩溃。
class WebEngineUrlRequestInterceptor(QWebEngineUrlRequestInterceptor):
def __init__(self, on_network_call):
super().__init__()
self.on_network_call = on_network_call
def interceptRequest(self, info):
self.on_network_call(info)
class PyQtWebClient(QWebEnginePage):
def __init__(self, url):
self.app = QApplication(sys.argv)
interceptor = WebEngineUrlRequestInterceptor(self.on_network_call)
profile = QWebEngineProfile()
profile.setRequestInterceptor(interceptor)
super().__init__(profile, None)
self.loadFinished.connect(self._on_load_finished)
self.html = ""
self.network_requests = {}
self.load(QUrl(url))
self.app.exec_()
def on_network_call(self, info):
# Something ...
def _on_load_finished(self):
self.toHtml(self.callable)
def callable(self, html_str):
self.html = html_str
self.app.quit()
试过PyQt5.11.2 和PyQt5.10.1
我期待以下两件事之一:
- 如果页面上仍有待处理的请求,则不应调用 self.loadFinished。
- 如果 self.loadFinished 被调用并且我的应用程序存在,拦截器的线程应该停止。
【问题讨论】:
标签: python pyqt pyqt5 qtwebengine