2017-12-19 2 views
1

일반적으로 새 창에서 열어도 같은 창에서 클릭하는 링크를 방문하거나 따라야하는 코드가 있습니다. 이것은 마우스 오른쪽 버튼을 클릭 한 다음 컨텍스트 메뉴에서 "링크 따라 가기"를 선택하는 대신 수행됩니다. 어떤 이유로 든 예상대로 작동하지 않습니다.QWebEngine을 사용하여 동일한 창에서 모든 링크 (심지어 _blank)를 엽니 다.

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

:이 같은 뷰를 반환하도록, 당신이 링크를 같은 창에서 항상 열려을 원하는 경우

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_()) 

답변

1

, 당신은 createWindow 방법을 구현할 수 있습니다 여기에

코드입니다 wintype 인수는 요청되는 창의 유형에 대한 정보를 제공합니다. 대화 상자 창을 다르게 처리 할 수 ​​있습니다.

예에서 WebEnginePage 서브 클래스가 작동하지 않아도된다는 점에 유의하십시오.

+0

작동하지만 Qmainwindow의 중앙 위젯에 webengineview가있어서이 작업을 어떻게 수행 할 수 있습니까? 나는 자기 대신에 자기를 되돌려려고 노력했다. 그러나 didnt는 일한다. – Maxwe11

+1

@ Maxwe11. 당신은 아무것도 바꾸면 안됩니다. 그것은'돌아 오는 자기 '여야합니다. 내 답변에 표시된 것과 같은'QWebEngineView'의 별도 서브 클래스가 있어야합니다. 'HtmlView'의 인스턴스를 만들고 그것을'QMainWindow'의 중앙 위젯으로 설정하십시오. – ekhumoro

+0

해지 하나 더 많은 문제가 있습니다. 창을 만들면 과거 기록에 더 이상 액세스 할 수 없습니다. 그것을 할 수있는 다른 방법이 있습니까? Qwebengine의 상황에 맞는 메뉴에서 follow link를 어떻게 모방 할 수 있습니까? – Maxwe11

관련 문제