我有一个相当复杂的应用程序,工作得很好。在系统从Debian 11升级到Debian 12之后,QWebEngineView组件显示一个空白屏幕(只是一个白窗口)。这是在由Poetry管理的虚拟环境中运行的。环境中的所有包都是最新版本。
测试用例如下所示。当在安装了本地包的Debian 12系统上运行时(没有venv),测试用例运行良好。当它失败时,没有输出,没有错误,什么都没有。我甚至不知道该如何诊断。
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl
html = """
<!DOCTYPE html>
<html>
<body>
<h1>Test</h1>
</body>
</html>
"""
app = QApplication(sys.argv)
web = QWebEngineView()
web.setHtml(html)
web.show()
sys.exit(app.exec_())
更新:我已经修改了测试用例的主体如下:
app = QApplication(sys.argv)
def loadstart():
print("load started")
def loadfin():
print("load end")
def loadprog(n):
print(f"progress {n=}")
web = QWebEngineView()
web.loadStarted.connect(loadstart)
web.loadFinished.connect(loadfin)
web.loadProgress.connect(loadprog)
在工作环境中:
$ ./web.py
load started
progress n=0
progress n=20
progress n=100
load end
在失败环境中:
$ ./web.py
load started
progress n=0
progress n=100
因此,工作环境有一个在20%负载时被调用的信号,而故障环境没有;此外,失败的环境确实达到100%,但从不调用loadFinished
还在想怎么回事…
PyQt邮件列表的回答:
看起来像这个问题:https://bugreports.qt.io/browse/QTBUG-103969
5.15.2二进制发行版不能用于更新的glibc版本。
我所知道的唯一的解决方法是通过——禁用seccompp -filter-sandbox作为QApplication的参数之一,或者使用较新的WebEngine版本。