使用pyside2-uic转QT Designer UI文件报No module named 'QWebEngineView'如何解决
PySide2转换包含QWebEngineView的UI文件报错解决方案
我长期使用Qt Designer制作GUI,保存为XML格式的.ui模板文件,通过PySide2工具链转换为Python类文件。对包含QWebEngineView组件的UI文件执行转换命令时:
pyside2-uic GUI_NEW.ui > ui_main.py
生成的ui_main.py文件头部自动生成了错误的导入语句:
################################################################################ ## Created by: Qt User Interface Compiler version 5.15.2 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ from PySide2.QtCore import * from PySide2.QtGui import * from PySide2.QtWidgets import * from QWebEngineView import QWebEngineView
运行调用该文件的程序时抛出如下错误:
ModuleNotFoundError: No module named 'QWebEngineView'
已尝试无效方案
- 更换PySide2为PySide6测试
- 手动将导入语句替换为
from PySide2.QtWebEngineWidgets import QWebEngineView,程序可启动但完全卡死无响应 - 执行
pip install PyQtWebEngine安装依赖 - 执行
pip install PyQt5==5.11.3安装指定版本 - 完全卸载所有Qt相关依赖(含PySide、PyQt全系列)后重新安装
- 在Python 3.6~3.8多版本环境中重复上述所有操作
可落地解决方案
第一步:修复uic自动生成导入错误的根因
uic生成错误导入语句的原因是Qt Designer中未正确声明QWebEngineView的所属模块,需要在.ui文件中手动添加头部声明:
- 用文本编辑器打开GUI_NEW.ui文件,找到
<ui>标签下的<customwidgets>节点(如果没有就手动新增) - 插入如下QWebEngineView的模块声明:
<customwidget> <class>QWebEngineView</class> <extends>QWidget</extends> <header>PySide2.QtWebEngineWidgets</header> </customwidget>
- 保存后重新执行
pyside2-uic GUI_NEW.ui > ui_main.py,此时生成的导入语句会自动变为正确的from PySide2.QtWebEngineWidgets import QWebEngineView,无需手动修改生成文件
第二步:解决程序启动卡死问题
程序卡死是因为QWebEngineView需要单独的进程初始化,且必须在Qt主事件循环启动前完成核心配置:
- 主程序入口处初始化QApplication时,必须添加属性配置:
from PySide2.QtCore import Qt from PySide2.QtWidgets import QApplication from PySide2.QtWebEngineWidgets import QWebEngineSettings if __name__ == "__main__": # 必须在QApplication实例化前设置属性 QApplication.setAttribute(Qt.AA_ShareOpenGLContexts) app = QApplication([]) # 禁用不必要的WebEngine特性减少卡顿 QWebEngineSettings.globalSettings().setAttribute(QWebEngineSettings.PluginsEnabled, False) QWebEngineSettings.globalSettings().setAttribute(QWebEngineSettings.JavascriptCanOpenWindows, False) # 后续正常加载主窗口代码 # ... app.exec_()
- 确认当前环境安装的PySide2版本配套的WebEngine组件完整,执行安装命令:
pip install pyside2==5.15.2 pyside2-addons
注意PySide2的WebEngine组件包含在pyside2-addons包中,无需安装PyQt相关依赖,避免版本冲突。
内容的提问来源于stack exchange,提问作者idroid8
相关产品推荐
相关产品推荐

