我需要重新实现"复制链接"上下文菜单中的QWebView
,用于在例程中执行其他操作。
复制链接是唯一真正在ajax网站内运行的链接,所以我试图重新实现从链接"下载#34;通过这种方法。
问题在于我不知道如何重新实现"复制链接"的基本功能。用于检索URL。
答案 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_())