You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QWebEngineView无错误输出崩溃求助:未改代码突发故障

问题:PyQt5 WebEngine 程序无征兆冻结崩溃(Segmentation Fault)

页面加载完成后,在搜索框输入内容时程序完全冻结,点击部分链接后直接冻结崩溃,无任何错误提示。此前代码可正常运行,未修改代码的情况下突发故障。已检查驱动、重装PyQt,问题仍未解决。

环境:Windows 10、Python 3.9.7,崩溃时MinGW提示Segmentation fault。

代码示例:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *

class TabWidget(QTabWidget):
    def __init__(self, *args, **kwargs):
        QTabWidget.__init__(self, *args, **kwargs)
        url = QUrl("https://google.com")
        view = HtmlView(self)
        view.load(url)
        ix = self.addTab(view, "loading ...")

class HtmlView(QWebEngineView):
    def __init__(self, *args, **kwargs):
        QWebEngineView.__init__(self, *args, **kwargs)
        self.tab = self.parent()

    def createWindow(self, windowType):
        if windowType == QWebEnginePage.WebBrowserTab:
            webView = HtmlView(self.tab)
            ix = self.tab.addTab(webView, "loading ...")
            self.tab.setCurrentIndex(ix)
            return webView
        return QWebEngineView.createWindow(self, windowType)

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    main = TabWidget()
    main.show()
    sys.exit(app.exec_())
解决方法
  • 禁用Qt WebEngine沙箱:Windows环境下,WebEngine的沙箱机制易触发段错误,启动时添加--no-sandbox参数:

    if __name__ == "__main__":
        import sys
        sys.argv.append("--no-sandbox")
        app = QApplication(sys.argv)
        main = TabWidget()
        main.show()
        sys.exit(app.exec_())
    
  • 锁定兼容的PyQt版本:Python 3.9.7适配PyQt5 5.15.x系列,卸载现有版本后重装指定版本:

    pip uninstall pyqt5 pyqtwebengine
    pip install pyqt5==5.15.6 pyqtwebengine==5.15.6
    
  • 重置WebEngine缓存:缓存损坏会引发运行异常,可自定义缓存路径并清理旧缓存:

    from PyQt5.QtWebEngineWidgets import QWebEngineProfile
    import os
    
    if __name__ == "__main__":
        import sys
        cache_dir = os.path.join(os.path.expanduser("~"), "CustomWebCache")
        os.makedirs(cache_dir, exist_ok=True)
        QWebEngineProfile.defaultProfile().setCachePath(cache_dir)
        
        sys.argv.append("--no-sandbox")  # 可结合沙箱禁用
        app = QApplication(sys.argv)
        main = TabWidget()
        main.show()
        sys.exit(app.exec_())
    
  • 更新Windows系统:系统补丁缺失可能导致底层运行库异常,确保Windows 10已安装最新更新包。

内容的提问来源于stack exchange,提问作者Dmitrii Gavrilov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:35:20