You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3/Qt6中如何识别中键点击链接的导航请求?

解决PyQt6 QWebEngineView中键点击链接无法拦截的问题

在PyQt6中,中键点击或Ctrl+左键点击链接默认会触发新窗口请求,而非当前页面的导航请求,因此不会调用acceptNavigationRequest()。要实现自定义的中键点击逻辑,你可以通过以下方式处理:

核心思路

利用QWebEnginePage的newWindowRequested信号,该信号会在任何需要打开新窗口的操作(包括中键点击、Ctrl+左键点击、页面内window.open()调用)时触发,信号携带的QWebEngineNewWindowRequest对象包含了目标URL、打开方式等关键信息。

实现步骤

  1. 自定义QWebEnginePage子类,绑定newWindowRequested信号的处理函数;
  2. 在信号处理函数中获取目标URL,创建新窗口打开链接;
  3. 调用请求对象的accept()方法,阻止默认的系统浏览器打开行为。

代码示例

from PyQt6.QtWidgets import QApplication, QMainWindow, QWebEngineView
from PyQt6.QtWebEngineCore import QWebEnginePage, QWebEngineNewWindowRequest
import sys

class CustomWebEnginePage(QWebEnginePage):
    def __init__(self, parent=None):
        super().__init__(parent)
        # 绑定新窗口请求信号
        self.newWindowRequested.connect(self.handle_new_window)

    def handle_new_window(self, request: QWebEngineNewWindowRequest):
        # 获取目标URL
        target_url = request.url().toString()
        # 创建新的浏览器窗口打开链接
        new_window = QMainWindow()
        new_view = QWebEngineView()
        new_view.setPage(CustomWebEnginePage(new_view))
        new_view.load(request.url())
        new_window.setCentralWidget(new_view)
        new_window.show()
        # 接受请求,阻止默认行为(比如调用系统浏览器)
        request.accept()

class BrowserWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.web_view = QWebEngineView()
        self.web_view.setPage(CustomWebEnginePage(self.web_view))
        self.web_view.load("https://example.com")
        self.setCentralWidget(self.web_view)
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = BrowserWindow()
    sys.exit(app.exec())

补充说明

  • 如果你需要区分中键点击和其他新窗口请求(比如页面脚本调用window.open()),可以通过request.trigger()方法获取触发类型,QWebEngineNewWindowRequest.Trigger.MouseMiddleClick即为中键点击触发;
  • 若要保留当前页面的左键点击逻辑,仍可在acceptNavigationRequest()中处理NavigationType.NavigationTypeLinkClicked类型的请求。

内容的提问来源于stack exchange,提问作者nst0022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:55:16