使用 QWebEngine 在相同的 window 中打开任何 link(甚至 _blank)
Make any link (even _blank) open in same window using QWebEngine
我有这段代码应该 visit/follow 我在同一 window 中单击的任何 link,即使它通常会在新的 window 中打开.这将不必右键单击然后从上下文菜单中单击 select "Follow link"。由于某种原因,它没有按预期工作。
代码如下:
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_())
如果您希望链接始终在同一个 window 中打开,您可以重新实现 createWindow 方法,使其 returns 同一个视图:
class HtmlView(QWebEngineView):
def createWindow(self, wintype):
return self
wintype
参数提供有关正在请求哪种类型的 window 的信息。您可能希望以不同的方式对待对话 windows。
请注意,您的示例中的 WebEnginePage
子类不需要此工作。
我有这段代码应该 visit/follow 我在同一 window 中单击的任何 link,即使它通常会在新的 window 中打开.这将不必右键单击然后从上下文菜单中单击 select "Follow link"。由于某种原因,它没有按预期工作。
代码如下:
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_())
如果您希望链接始终在同一个 window 中打开,您可以重新实现 createWindow 方法,使其 returns 同一个视图:
class HtmlView(QWebEngineView):
def createWindow(self, wintype):
return self
wintype
参数提供有关正在请求哪种类型的 window 的信息。您可能希望以不同的方式对待对话 windows。
请注意,您的示例中的 WebEnginePage
子类不需要此工作。