QWebEngineView加载Pyodide(WebAssembly模块)失败问题求助
解决PyQt5 WebEngineView中Pyodide加载失败的问题
问题核心
你碰到的js: Uncaught (in promise) TypeError: wasm function signature contains illegal type错误,主要是因为PyQt5内置的QWebEngineView依赖的Chromium版本过旧,不支持Pyodide 0.23.4用到的WebAssembly新特性。而本地Opera GX是新版浏览器,自然能正常运行。另外你的Python代码里有个低级错误:用了JavaScript风格的//注释,Python只认#作为注释符号,这会直接导致代码运行报错。
解决方案
方案1:升级到PyQt6(推荐)
PyQt6的QWebEngineView基于更新的Chromium内核,对WebAssembly支持更完善。
修改后的Python代码:
from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget from PyQt6.QtWebEngineWidgets import QWebEngineView from PyQt6.QtCore import QUrl import sys class MainWindow(QMainWindow): def __init__(self): super().__init__() # 设置主窗口 self.setWindowTitle("PyQt6 App with QWebEngineView") self.setGeometry(100, 100, 800, 600) # 创建QWebEngineView组件 self.browser = QWebEngineView() # 本地服务器URL url = QUrl("http://localhost:8000/monaco.html") # 设置加载的URL self.browser.setUrl(url) # 布局设置 layout = QVBoxLayout() layout.addWidget(self.browser) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec())
安装PyQt6依赖:
pip install PyQt6 PyQt6-WebEngine
方案2:降级Pyodide版本(适配PyQt5)
如果坚持使用PyQt5,将Pyodide降级到0.20.0版本,该版本的WebAssembly特性兼容旧版Chromium。
修改HTML中的Pyodide加载链接:
<!-- 先加载Pyodide --> <script src="https://cdn.jsdelivr.net/pyodide/v0.20.0/full/pyodide.js"></script>
同时修改初始化代码里的indexURL:
pyodide = await loadPyodide({ indexURL: "https://cdn.jsdelivr.net/pyodide/v0.20.0/full/" });
方案3:修复Python代码的注释错误
无论采用哪个方案,先把Python代码里所有的//替换成#,否则代码根本无法启动。
额外检查
- 确认本地Web服务器正常运行,能通过浏览器访问
http://localhost:8000/monaco.html - 运行Python程序前,关闭所有残留的PyQt进程,避免缓存干扰
内容的提问来源于stack exchange,提问作者Doge
相关产品推荐
相关产品推荐

