我正在尝试使用 PyQt6 及其小部件制作一个非常简单的网络浏览器。我只是想将 DuckDuckGo 显示为主要搜索引擎。问题如下:主窗口工作正常,但是它没有加载 DuckDuckGo 页面,控制台输出如下:
js: Error with Permissions-Policy header: Origin trial controlled feature not enabled: 'unload'.
。
我在 stackOverflow 中搜索了 PyQt6 文档和类似问题。然而,这些都不起作用。尽管我尝试搜索有关它的信息,但我仍然不明白这个错误是什么意思。代码如下:
#importing PyQt6 and dependencies
from PyQt6.QtWidgets import *
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import *
from PyQt6.QtWebEngineWidgets import QWebEngineView
import sys
#Main Window Class
class Window(QWidget):
def __init__(self): #Constructor
super().__init__()
self.resize(300,300) #Size
self.setWindowTitle("Web Browser") #Title
main_layout = QVBoxLayout()
self.setLayout(main_layout) #Not used
self.showMaximized() #Max window
def webSearchEngine(self): #Set DuckDuckGo as main browser
self.web = QWebEngineView()
self.mainSearchEngine = QUrl("https://duckduckgo.com") #Display Url
self.web.load(self.mainSearchEngine)
app = QApplication(sys.argv)
window = Window()
window.show() #Initiate window
window.webSearchEngine() #Initiate DuckDuckGo (Not working)
sys.exit(app.exec())
我发现了错误。 'js: Permissions-Policy 标头错误:未启用原始试验控制功能:'interest-cohort'' 与我尝试加载的网页使用的 Permissions-Policy 标头相关,而不是我提供的 Python 代码。
此错误与“兴趣群组”功能有关,该功能是 Google FLoC(群组联合学习)计划的一部分,但需要明确的许可才能启用。
虽然我发现这不是导致 DuckDuckGo 不弹出的主要原因,但我研究了一下,似乎只要忽略这个错误就应该没问题。
我的搜索引擎没有弹出的原因是因为我忘记将其添加到主布局中,所以我做了以下事情:
from PyQt6.QtWidgets import *
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import *
from PyQt6.QtWebEngineWidgets import *
import sys
#Main Window Class
class Window(QWidget):
def __init__(self): #Constructor
super().__init__()
self.resize(300,300) #Size
self.setWindowTitle("Web Browser") #Title
global main_layout
main_layout = QVBoxLayout()
self.setLayout(main_layout) #Not used
self.showMaximized() #Max window
def on_load_finished(self,ok):
if ok:
print("Everything going ok")
else:
print("An error has occurred")
def webSearchEngine(self): #Set DuckDuckGo as main browser
self.web = QWebEngineView()
self.mainSearchEngine = QUrl("https://duckduckgo.com") #Display Url
self.web.load(self.mainSearchEngine)
self.web.loadFinished.connect(self.on_load_finished)
main_layout.addWidget(self.web)
app = QApplication(sys.argv)
window = Window()
window.show() #Initiate window
window.webSearchEngine() #Initiate DuckDuckGo (Not working)
sys.exit(app.exec())
首先,我创建了一个“def on_load_finished()”函数,即使我没有在 python 窗口中看到,它也会检查 DuckDuckGo 是否正在加载。它给我带来了很好的价值,所以我发现我忘记将网络小部件添加到主布局中。
因此,只需将“main_layout”声明为全局变量,然后使用“addWidget()”函数来包含 Web 小部件,就可以正常工作了。