2014-12-19 4 views
2

루틴 내부의 다른 작업을 수행하기 위해 상황에 맞는 메뉴에서 QWebView의 "복사 링크"를 다시 구현해야합니다.QWebView 복사 링크 다시 구현

복사 링크는 아약스 사이트에서 실제로 작동하는 유일한 사이트이므로이 링크를 통해 "다운로드 링크"를 다시 구현하려고합니다.

문제는 URL 검색을위한 "복사 링크"의 기본 기능을 다시 구현하는 방법을 모르겠다는 것입니다.

답변

3

QWebView.contextMenu을 다시 구현하고 QWebPage.createStandardContextMenu으로 표준 메뉴를 생성하여 추가 메뉴 항목을 추가 할 수 있습니다.

그러면 URL (있는 경우)을 제공하기 위해 상황에 맞는 메뉴가 요청 된 위치에서 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_()) 
+0

감사합니다 :

여기에 기본적인 아이디어의 간단한 데모입니다! 히트 테스트 결과는 내가 놓친 부분이었습니다! – Rigel