Skip to main content
 首页 » 编程设计

python之使用 QWebEngine 在同一窗口中打开任何链接(甚至是_blank)

2024年09月07日42Terrylee

我有这段代码应该访问/跟踪我在同一窗口中单击的任何链接,即使它通常会在新窗口中打开。这将不必右键单击然后从上下文菜单中选择“关注链接”。由于某种原因,它没有按预期工作。

代码如下:

from PyQt5.QtCore import QUrl 
from PyQt5.QtGui import QDesktopServices 
from PyQt5.QtWidgets import QApplication 
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage 
 
 
class WebEnginePage(QWebEnginePage): 
    def acceptNavigationRequest(self, url,  _type, isMainFrame): 
        if _type == QWebEnginePage.NavigationTypeLinkClicked: 
            return True 
        return QWebEnginePage.acceptNavigationRequest(self, url,  _type,      isMainFrame) 
 
class HtmlView(QWebEngineView): 
    def __init__(self, *args, **kwargs): 
        QWebEngineView.__init__(self, *args, **kwargs) 
        self.setPage(WebEnginePage(self)) 
 
if __name__ == '__main__': 
    import sys 
 
    app = QApplication(sys.argv) 
    w = HtmlView() 
    w.load(QUrl("https://yahoo.com")); 
    w.show() 
    sys.exit(app.exec_()) 

请您参考如下方法:

如果您希望链接始终在同一个窗口中打开,您可以重新实现 createWindow方法,以便它返回相同的 View :

class HtmlView(QWebEngineView): 
    def createWindow(self, wintype): 
        return self 

wintype 参数提供有关正在请求哪种类型的窗口的信息。您可能希望以不同方式对待对话窗口。

请注意,您的示例中的 WebEnginePage 子类不需要此工作。