使用QWebEngine在同一窗口中打开任何链接(甚至_blank)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用QWebEngine在同一窗口中打开任何链接(甚至_blank)相关的知识,希望对你有一定的参考价值。
我有这个代码应该访问/关注我在同一窗口中单击的任何链接,即使它通常会在新窗口中打开。这不是必须右键单击,然后从上下文菜单中选择“关注链接”。出于某种原因,它无法按预期工作。
这是代码:
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_())
答案
如果希望链接始终在同一窗口中打开,则可以重新实现createWindow方法,以便返回相同的视图:
class HtmlView(QWebEngineView):
def createWindow(self, wintype):
return self
wintype
参数提供有关正在请求的窗口类型的信息。您可能希望以不同方式处理对话框窗口。
请注意,您的示例中的WebEnginePage
子类不需要此工作。
以上是关于使用QWebEngine在同一窗口中打开任何链接(甚至_blank)的主要内容,如果未能解决你的问题,请参考以下文章
如何在单击 Hyperlink1 打开的同一窗口中打开超链接 (2)