重新实现QWebView复制链接

时间:2014-12-19 12:38:17

标签: python qt pyqt contextmenu qwebview

我需要重新实现"复制链接"上下文菜单中的QWebView,用于在例程中执行其他操作。

复制链接是唯一真正在ajax网站内运行的链接,所以我试图重新实现从链接"下载#34;通过这种方法。

问题在于我不知道如何重新实现"复制链接"的基本功能。用于检索URL。

1 个答案:

答案 0 :(得分:3)

您可以通过重新实现QWebView.contextMenu并使用QWebPage.createStandardContextMenu生成标准菜单来添加额外的菜单项。

然后您需要做的就是从请求上下文菜单的位置获取hit-test result,以便为您提供网址(如果有的话)。

以下是基本概念的简单演示:

from PyQt4 import QtGui, QtWebKit

class Browser(QtWebKit.QWebView):
    def __init__(self):
        super(Browser, self).__init__()
        self.setHtml('''
        <html><head><title>Test Page</title>
        <body>
        <p><a href="https://stackoverflow.com">link</a></p>
        </body>
        </html>
        ''')

    def contextMenuEvent(self, event):
        menu = self.page().createStandardContextMenu()
        hit = self.page().currentFrame().hitTestContent(event.pos())
        url = hit.linkUrl()
        if not url.isEmpty():
            menu.addSeparator()
            action = menu.addAction('Download')
            action.triggered.connect(lambda: self.download(url))
        menu.exec_(event.globalPos())

    def download(self, url):
        print('download:', url)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    browser = Browser()
    browser.setGeometry(800, 200, 400, 200)
    browser.show()
    sys.exit(app.exec_())